PDO无法绑定两个属性

我正在尝试将搜索字词和限制值绑定到PDO执行查询,但是无论采用哪种方式,我都会收到错误消息

    public static function searchUsersByName($searchTerm, $results = null) {
    //getDBConnection

    if($results == null) {
        $results = 5;
    }

    $searchTerm = '%'.$searchTerm.'%';

    $query = $database->prepare("SELECT user_id, user_firstname, user_lastname
                                 FROM users_details
                                 WHERE user_firstname LIKE :searchTerm 
                                    OR user_lastname LIKE :searchTerm
                                   LIMIT :results");
    $query->bindParam(':searchTerm', $searchTerm, PDO::ParaM_STR);
    $query->bindParam(':results', $results, PDO::ParaM_INT);
    $query->execute();

    $search_results = array();

    foreach ($query->fetchAll() as $user) {
        $search_results[$user->user_id] = new stdClass();
        $search_results[$user->user_id]->user_id = $user->user_id;
        $search_results[$user->user_id]->user_firstname = $user->user_firstname;
        $search_results[$user->user_id]->user_lastname = $user->user_lastname;
    }

    return $search_results;
}

这是我从中得到的错误

PDOStatement :: execute():sqlSTATE [42000]:语法错误或访问冲突:1064 sql语法错误;检查与您的MysqL服务器版本相对应的手册,以获取在“ 5”附近使用的正确语法

如果我取出LIMIT的绑定并将硬编码5放入SQL查询中,则可以正常工作,但我希望能够更改它

$query-> execute(array(‘:searchTerm’=>’%’.$searchTerm.’%’,’:results’=> $results));

我已经尝试过这样做,但是PDO当然会通过这种方法自动在其插入的值周围加上引号,据我所知,在使用此方法时您无法放入PDO :: ParaM_INT.

我究竟做错了什么?

解决方法:

可能$results不是整数吗?该错误似乎是您的PHP代码正在将字符串发布到查询中,这将解释该错误.

我猜这是问题,因为下面的代码

if($results == null) {
    $results = 5;
}

首先如何设置$results?通过GET / POST吗?然后,它可能已被转换为字符串.

我已经亲自尝试了您的代码并将其转换为int为我修复.

$query->bindParam(':results', intval($results), PDO::ParaM_INT);

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...