1

为什么我的 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”。“客户编号”是类型(自动编号)“订单文件”。“客户编号”是类型(编号)

意见或建议?

4

1 回答 1

1

MDBTools 不支持 JOIN 或 ORDER BY。见http://github.com/brianb/mdbtools/blob/master/src/sql/lexer.l

于 2017-10-19T13:22:46.750 回答