我有一个需要连接的 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 错误:关系“已接收项目”不存在
我需要以某种方式转义表名称中的空格。 双引号适用于列名,但不适用于表名。 我尝试过单引号、双引号、反引号和带有不同引号的方括号。 开始怀疑这是否不可能。
尝试以下查询。其工作正常(已测试)
$strSQL = 'SELECT `Assigned To`, `Assigned Date`, `Image Cnt`
FROM `received projects`
WHERE `received projects`.`Image Cnt` > 0';
希望这能满足您的要求。 :) 注意:请避免空格。最好使用 Camel 命名约定。
在尝试通过 PHP 中的 PDO 将 SQL 查询发送到 Access 数据库时,使用对我有用的方法来回答这个问题。如果我在名为“地址”的表中有一个名为“用户地址”的字段,您可以尝试以下查询:
$sql = "SELECT [User Address] FROM Addresses";
这将会失败。此外,将字段名称用单引号引起来也不会返回正确的结果。有效的方法是简单地删除字段名称中的空格:
$sql = "SELECT UserAddress FROM Addresses";
这适用于 SELECT 字段名称中包含空格。此外,当您从结果中获取一行时返回的关联数组的键也不包含空格,因此您可以使用以下方法从该结果的一行中获取结果:
$row['UserAddress'];