这是我的代码:
$sql="SELECT duration,address,roozhaye_bargozari, ";
$sql.="ostan_name,city_name,cluster_name,education_node.name ";
$sql.="FROM class ";
$sql.="LEFT JOIN education_cluster ec ON ec.id=class.cluster_id ";
$sql.="LEFT JOIN education_node ON education_node.id=class.node_id ";
$sql.="LEFT JOIN ostan ON ostan.id=class.ostan_id ";
$sql.="LEFT JOIN city ON city.id=class.city_id ";
$sql.="WHERE class.master_id=? LIMIT ?,?";
$result=$db->prepare($sql);
$result->execute(array($master_id,$startpos,$endpos));
$final_result=$result->fetchAll(PDO::FETCH_ASSOC);
当我使用这段代码时,出现了这条错误信息: PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 C:\wamp\www\fani\inc\class\user.php 的第 239 行 <'0','2'' 附近使用的正确语法
但是如果我使用这个:
.
.
.
$sql.="WHERE class.master_id=? LIMIT $startpos,$endpos";
$result=$db->prepare($sql);
$result->execute(array($master_id);
$final_result=$result->fetchAll(PDO::FETCH_ASSOC)
代码运行正常,问题是什么?
最佳答案
仔细观察错误...
''0','2''
并注意那里的引号。 execute
导致查询失败,因为它添加了单引号并将整数视为字符串。您的第二个查询起作用的原因是因为您将数字直接插入到查询中而不是绑定(bind)它们。为了让它工作,你需要做这样的事情......
$result=$db->prepare($sql);
$result->bindParam(1, $master_id, PDO::PARAM_INT);
$result->bindParam(2, $startpos, PDO::PARAM_INT);
$result->bindParam(3, $endpos, PDO::PARAM_INT);
$result->execute();
$final_result=$result->fetchAll(PDO::FETCH_ASSOC);
关于php - 如何在 pdo 语句中绑定(bind)限制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29444107/