Php 联接查询中的PDO异常

Php 联接查询中的PDO异常,php,pdo,odbc,Php,Pdo,Odbc,我整个上午都在做这个,我不明白为什么它不起作用 $spn = '20275096'; $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)}; Dbq=".realpath('exported/test1.mdb')."; Uid=Admin"); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $

我整个上午都在做这个,我不明白为什么它不起作用

$spn = '20275096';
$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)}; Dbq=".realpath('exported/test1.mdb')."; Uid=Admin");   
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $dbh->prepare(" SELECT Cup_PartUpdateCommodityID FROM Cup_PartUpdateCommodity 
                   INNER JOIN Cup_PartUpdateInfo ON 
                      [Cup_PartUpdateCommodity].Cup_PartUpdateCommodityID = [Cup_PartUpdateInfo].Cup_PartUpdateCommodityID 
                   INNER JOIN Cup_PartUpdate ON 
                      [Cup_PartUpdateInfo].Cup_PartUpdateID = [Cup_PartUpdate].Cup_PartUpdateID 
                   WHERE [Cup_PartUpdate].PartNum = :partnum ");

$stmt->bindParam(':partnum', $spn);
$stmt->execute();
$row = $stmt->fetch(); 
echo $row['Cup_PartUpdateCommodityID'];
它抛出以下错误:

致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[42000]:语法错误或访问冲突:-3100

[Microsoft][ODBC Microsoft Access驱动程序]语法错误(缺少 查询表达式中的运算符) “[Cup\u PartUpdateCommodity].Cup\u PartUpdateCommodityID”= [Cup\u PartUpdateInfo].Cup\u PartUpdateCommodityID内部联接 在[Cup\u PartUpdateInfo].Cup\u PartUpdateID上更新Cup\u PartUpdate= [Cup\u PartUpdate].Cup\u PartUpdateID'。(SQLExecute[-3100]at c:\sites\myproject\test.php:31中的ext\pdo_odbc\odbc_stmt.c:254)”

堆叠 跟踪:#0 C:\sites\myproject\test.php(31):PDOStatement->execute()#1 {main}在第31行的C:\sites\myproject\test.php中抛出


注意:上面的代码将在期望$spn作为参数的函数中执行。现在我正在为$spn设置一个默认值。有人吗?

终于找到了基于的解决方案

事实证明,MS Access的连接需要这样做:

A JOIN (
B JOIN C ON <condition_BC>
) ON <condition_AB>

我知道Access会以意想不到的方式做一些事情—您需要在表名周围加上方括号吗?如果不需要的话,我建议把它们拿出来。我两种方法都试过了,结果都一样。值得一试。在这种情况下,您可以在调试时尝试简化语句吗?保留其中一个内部连接并移除另一个,看看是否有效?
A JOIN B ON <condition_AB>
JOIN C ON <condition_BC>
$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)}; Dbq=".realpath('exported/test1.mdb')."; Uid=Admin");   
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $dbh->prepare(" SELECT * FROM Cup_PartUpdateCommodity 
                            LEFT JOIN (
                              Cup_PartUpdateInfo LEFT JOIN Cup_PartUpdate ON Cup_PartUpdateInfo.Cup_PartUpdateID = Cup_PartUpdate.Cup_PartUpdateID 
                            ) ON Cup_PartUpdateCommodity.Cup_PartUpdateCommodityID = Cup_PartUpdateInfo.Cup_PartUpdateCommodityID
                            WHERE Cup_PartUpdate.PartNum = :partnum ");
    $stmt->bindParam(':partnum', $spn);
    $stmt->execute();
    $row = $stmt->fetch(); 
    echo $row['Cup_PartUpdateCommodityID'];