php - 如何在 pdo 语句中绑定(bind)限制值?

标签 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);

当我使用这段代码时,出现了这条错误信息: 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/

相关文章:

php - 锁定表如何工作?

php - MySQL:如何将旧数据移至数据库

php - 我应该在 PDO 对象中返回什么来生成可靠的代码?

mysql - FIND IN SET 不适用于 PDO

php - 为允许独立配置文件的 Web 应用程序使用多个数据库

javascript - 对网页进行实时更新时跟踪更改的方法

PHP exec() 作为后台进程(Windows Wampserver 环境)

php - 向 PHP Wordpress 添加样式

php - 我的正则表达式没有正确替换

php - mysql_real_escape_string 是否足以用于非常简单的数据库插入?