如何在pdo语句中绑定限制值?

时间:2015-04-04 08:01:13

标签: php mysql pdo

这是我的代码:

$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);

当我使用此代码时,此错误消息apear:     PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在' 0',' 2'''在第23行的C:\ wamp \ www \ fani \ inc \ class \ user.php第1行

但如果我使用它:

.
.
.
$sql.="WHERE class.master_id=? LIMIT $startpos,$endpos";

        $result=$db->prepare($sql);
        $result->execute(array($master_id);
        $final_result=$result->fetchAll(PDO::FETCH_ASSOC)

代码运行正常,问题是什么?

1 个答案:

答案 0 :(得分:0)

仔细查看错误......

  

'' 0' , '2''

并注意那里的引号。 execute导致查询失败,因为它正在添加单引号并将整数视为字符串。第二个查询的工作原因是因为您将数字直接插入查询而不是绑定它们。为了使它工作,你需要做这样的事情......

$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);