Access数据库PDO关联查询添加条件后返回错误结果求助
Access PDO 查询添加WHERE条件后返回错误结果的解决方法
你好,我看了你的问题,原来的关联查询能正常运行,但加了WHERE条件和参数绑定后就出问题了,主要是几个细节没处理对,我帮你梳理并修正:
问题根源
- 参数绑定语法错误:你在WHERE子句里写的
ndrags和nrags没有加冒号:,PDO的命名参数必须以冒号开头才能被识别为绑定参数,否则会被当成字段名或者字符串常量。 - 字段名拼写错误:根据你给出的表结构,
tblRagioneSociale的字段是rags,但你在WHERE条件里用了nomer,这会直接导致数据库找不到该字段的错误。 - 冗余参数传递:你最初的完整代码里,prepare的SQL没有WHERE条件,但execute却传了参数,这虽然不会报错,但属于多余操作。
修正后的完整代码
<?php $db_username = ''; // 填写你的数据库用户名 $db_password = ''; // 填写你的数据库密码 $database_path = "Z:\\2017datiW.mdb"; $database = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$database_path; Uid=$db_username; Pwd=$db_password;"); // 先对POST参数做基础校验和过滤,避免空值或非法输入 $rag = isset($_POST["rag"]) ? trim($_POST["rag"]) : ''; $nuovadest = isset($_POST["nuovadest"]) ? trim($_POST["nuovadest"]) : ''; // 修正SQL语句:补全参数冒号,修正字段名 $result1 = $database->prepare(' SELECT * FROM tblDestinazioni INNER JOIN tblRagioneSociale ON tblDestinazioni.id_cliente = tblRagioneSociale.id_cliente WHERE tblDestinazioni.nome_dest = :ndrags AND tblRagioneSociale.rags = :nrags '); // 执行查询,参数键名和SQL里的命名参数对应 $result1->execute(array(':nrags' => $rag, ':ndrags' => $nuovadest)); // 示例:获取查询结果 $results = $result1->fetchAll(PDO::FETCH_ASSOC); // 可以在这里处理结果,比如循环输出 ?>
额外调试建议
如果还是遇到问题,可以开启PDO的异常错误模式,这样能直接看到具体的错误信息,方便排查:
// 在初始化PDO之后添加这行代码 $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
内容的提问来源于stack exchange,提问作者A. Carminati
相关产品推荐
相关产品推荐

