我正在尝试将搜索字词和限制值绑定到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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。