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

Php 如何在pdo语句中绑定限制值?,php,mysql,pdo,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.

这是我的代码:

$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服务器版本对应的手册,以了解第239行C:\wamp\www\fani\inc\class\user.php中第1行“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
导致查询失败,因为它添加单引号并将整数视为字符串。第二个查询工作的原因是,您将数字直接插入到查询中,而不是绑定它们。为了让它工作,你需要做一些像这样的事情

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

只能绑定列值。不是列名、表名或限制。我尝试了一下,效果很好。但我不确定这是不是最好的方法$PDO->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);是的,很好。但是它很长。如何处理只是执行?我发现了一些东西($PDO->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);)并且它是有效的。但是我不确定这是否是一个最好的方法,我也不确定,如果它有效的话,PDO可能没有使用预先准备好的语句来删除安全性。我知道它很长,但是你不能用execute绑定
限制。