我试图将搜索词和限制值绑定到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
使用这种方法时。
我做错了什么?
答案 0 :(得分:3)
可能是$ results不是整数?错误似乎是您的PHP代码在查询中发布一个字符串,这将解释错误。
我猜这是问题,因为下面的代码
if($results == null) {
$results = 5;
}
首先如何设置$结果?通过GET / POST?然后它可能已被转换为字符串。
我已经尝试过你自己的代码并将其转换为int来修复它。
$query->bindParam(':results', intval($results), PDO::PARAM_INT);