gpt4 book ai didi

php - 绑定(bind) "true or false"作为 PDO 参数

转载 作者:行者123 更新时间:2023-12-04 15:52:54 26 4
gpt4 key购买 nike

我有一个包含 bool 值(也称为 tinyint、1 或 0)的 MySQL 列“public”。查询时我通常不关心公共(public)列的值,所以默认情况下我传递一个下划线(MySQL 通配符)。在某些情况下,虽然我只想要匹配“public = 0”或“public = 1”的行,所以我用 0 或 1 覆盖下划线。这不是我给出的最清楚的解释,所以这里有一些代码:

public function get_hunts($public = '_') {
$sth = $this->_db->prepare("SELECT * FROM hunts WHERE( user_id = :user AND public = :public)");
$sth->bindParam(':user', $this->_id);
$sth->bindParam(':public', $public);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);

return $result;
}

//get any result
get_results();

//get only public results
get_hunts(1)

以这种方式绑定(bind)下划线(我也尝试过通用通配符 %)会导致查询失败。实现此目标的更好方法是什么?

最佳答案

要使用任何通配符,您需要使用LIKE 比较而不是等号

AND public LIKE :public

否则,您需要采用某种查询构建器方法,根据函数的参数构建WHERE 条件。

public function get_hunts($public = null) {
$where = array(
'user_id = :user'
);
$params = array(
':user' => $this->_id
);

if (null !== $public) {
$where[] = 'public = :public';
$params[':public'] = (boolean) $public;
}

$query = 'SELECT * FROM hunts WHERE ' . implode(' AND ', $where);
$sth = $this->_db->prepare($query);
$sth->execute($params); // same as binding

return $sth->fetchAll(PDO::FETCH_ASSOC);
}

关于php - 绑定(bind) "true or false"作为 PDO 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526793/

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