【发布时间】:2018-03-30 18:25:46
【问题描述】:
为什么我的 sql 字符串会抛出语法错误?答:MDBTools 不支持 JOIN 或 ORDER BY 或其他 SEE http://github.com/brianb/mdbtools/blob/master/src/sql/lexer.l
此代码不起作用(. 附近的语法错误):
$db = "access.mdb";
$conn = new PDO("odbc:DRIVER=MDBTools; DBQ=$db; Uid=; Pwd=;");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT "Order No", "Ship To File"."Cust Name" ';
$sql = $sql . 'FROM "Order File" ';
$sql = $sql . 'INNER JOIN "Ship To File" ';
$sql = $sql . 'ON "Order File"."Customer No" = "Ship To File"."Cust No" ';
$sql = $sql . 'WHERE "Order No"=\'RV2002-001\'';
更长/其他信息:
可以肯定的是“Ship To File”。“Cust Name”。扔近了。错误,因为省略了“Ship To File”。“Cust Name”将错误更改为接近 INNER,这让我认为问题是带有空格的字段和表的命名空间问题。
用刻度替换带有空格的表和字段的双引号甚至会破坏最简单的查询(` 附近的语法错误)。 INNER JOIN 查询在 MS-Access 中似乎可以正常工作,但使用括号而不是双引号。
此代码也不起作用(` 处的语法错误):
$db = "access.mdb";
$conn = new PDO("odbc:DRIVER=MDBTools; DBQ=$db; Uid=; Pwd=;");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT `Order No` ";
$sql = $sql . "FROM `Order File` ";
这段代码给了我一个记录/结果:
$db = "access.mdb";
$conn = new PDO("odbc:DRIVER=MDBTools; DBQ=$db; Uid=; Pwd=;");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT "Order No" ';
$sql = $sql . 'FROM "Order File" ';
$sql = $sql . 'WHERE "Order No"=\'RV2002-001\'';
适用于 Linux 的 Windows 子系统,PHP 版本 5.5.9-1ubuntu4.22,apache2,MDBTools,无法更改数据库表或字段(目前通过符号链接访问数据库,而其他人仍在使用 MS Access 作为其界面) .
“Ship To File”。“Cust No”是类型(自动编号) “订单文件。”客户编号“是类型(编号)
意见或建议?
【问题讨论】:
-
如果我对有空格的字段名和表名使用刻度而不是双引号,我会在第一个刻度附近出现语法错误。如果我在一般字符串分配中使用刻度和双引号而不是单引号,仍然会出现刻度语法错误。
-
这不是 MYSQL。
-
您的 sql 数据库抛出语法错误。显示完整的错误消息。或者尝试用括号括住您的列和表名:stackoverflow.com/questions/12696259/…
-
root:/var/www/html/tops# php order.php 行错误:语法错误。附近有语法错误。 'SELECT "Order No", "Ship To File"."Cust Name" FROM "Order File" INNER JOIN "Ship To File" ON "Order File"."Customer No" = "Ship To File" 没有结果。 "Cust No" WHERE "Order No"='RV2002-001'' 命令分段错误(核心转储)
-
您现在可以将其添加为您自己的答案
标签: php ms-access pdo odbc mdbtools