PDO无法绑定两个属性

时间:2015-08-06 12:41:04

标签: php mysql 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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "5"

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

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

我尝试过这样做,但当然PDO会自动在这个方法中插入值插入的值,据我所知,你不能放PDO::PARAM_INT使用这种方法时。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

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

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

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

首先如何设置$结果?通过GET / POST?然后它可能已被转换为字符串。

我已经尝试过你自己的代码并将其转换为int来修复它。

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