转义 PDO odbc 中的空格

问题描述 投票:0回答:2

我有一个需要连接的 Access 数据库,其中有一个名为 [Received Projects] 的表,在该表中,我们有名为 [Assigned To]、[Assigned Date] 和 [Image Cnt] 的字段。 MS Access 和 odbc 一般来说可以使用如下 select 语句:

SELECT [Received Projects].[Assigned To], [Received Projects].[Assigned Date], [Received Projects].[Image Cnt]
FROM [Received Projects]
WHERE ([Received Projects].[Image Cnt])>0)

但是,我正在尝试使用 PHP 中的 PDO 连接,它不喜欢方括号。 有点喜欢这样的东西:

$strSQL = 'SELECT "Assigned To", "Assigned Date", "Image Cnt"
FROM "Received Projects"
WHERE ("Received Projects"."Image Cnt")>0)';

但是,它会抛出此错误,表明它不知道该表是什么:

PHP 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42P01]:未定义表:7 错误:关系“已接收项目”不存在

我需要以某种方式转义表名称中的空格。 双引号适用于列名,但不适用于表名。 我尝试过单引号、双引号、反引号和带有不同引号的方括号。 开始怀疑这是否不可能。

php pdo odbc whitespace
2个回答
2
投票

尝试以下查询。其工作正常(已测试)

$strSQL = 'SELECT `Assigned To`, `Assigned Date`, `Image Cnt` 
FROM `received projects` 
WHERE `received projects`.`Image Cnt` > 0';

希望这能满足您的要求。 :) 注意:请避免空格。最好使用 Camel 命名约定。


0
投票

在尝试通过 PHP 中的 PDO 将 SQL 查询发送到 Access 数据库时,使用对我有用的方法来回答这个问题。如果我在名为“地址”的表中有一个名为“用户地址”的字段,您可以尝试以下查询:

$sql = "SELECT [User Address] FROM Addresses";

这将会失败。此外,将字段名称用单引号引起来也不会返回正确的结果。有效的方法是简单地删除字段名称中的空格:

$sql = "SELECT UserAddress FROM Addresses";

这适用于 SELECT 字段名称中包含空格。此外,当您从结果中获取一行时返回的关联数组的键也不包含空格,因此您可以使用以下方法从该结果的一行中获取结果:

$row['UserAddress'];
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.