gpt4 book ai didi

php - PDO 不能绑定(bind)两个属性

转载 作者:可可西里 更新时间:2023-11-01 08:14:57 28 4
gpt4 key购买 nike

我正在尝试将搜索词和限制值绑定(bind)到 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 的绑定(bind)并且只是将 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);

关于php - PDO 不能绑定(bind)两个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31856083/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com