gpt4 book ai didi

php - 在 where 中使用 IN

转载 作者:可可西里 更新时间:2023-11-01 00:52:57 24 4
gpt4 key购买 nike

我在使用 MySQLi 的 where 子句中使用 IN 时遇到了一些问题,这是我的查询:

SELECT * FROM core_tags WHERE tag_id IN (1,2,3,4,5) GROUP BY tag_id ORDER BY tag_popularity ASC

如果我在 PHP My Admin 中运行它,那么我会得到 5 个结果,如我所料。但是,如果我使用以下代码在 PHP 中运行它,我只会得到一个 tag_id '1' 的结果。

这是我的 PHP。最初我是使用类中的函数来运行它,但我已经对其进行了手工编码以测试它不仅仅是我的函数中出现相同问题的错误。

$mysqli = new mysqli(DB_SERVER, DB_NAME, DB_PASSWORD, DB_NAME);
$rawQuery = 'SELECT * FROM core_tags WHERE tag_id IN (?) GROUP BY tag_id ORDER BY tag_popularity ASC';
$stmt = $mysqli->prepare($rawQuery);
$stmt->bind_param("s", $tag_ids);
$tag_ids = "1,2,3,4,5";
$stmt->execute();
$stmt->bind_result($tag_id, $tag_name, $tag_desc, $tag_popularity);

while ($stmt->fetch()) {
printf ("%s\n", $tag_name);
}

$stmt->close();
die();

有人知道为什么 mysqli 版本只返回一行吗?使用 MySQL 而不是 mysqli 也能正常工作,与 PHP My Admin 相同。

最佳答案

使用字符串准备语句将使您的最终 SQL 看起来像:

IN ('1,2,3,4,5')

带引号,这不是你想要的。我要做的是:

$ids= array(1,2,3,4,5);
$mysqli = new mysqli(DB_SERVER, DB_NAME, DB_PASSWORD, DB_NAME);

$rawQuery = 'SELECT * FROM core_tags WHERE tag_id IN (';
$rawQuery .= implode(',',array_fill(0,count($ids),'?'));
$rawQuery .= ') GROUP BY tag_id ORDER BY tag_popularity ASC';
$stmt = $mysqli->prepare($rawQuery);
call_user_func_array(array($stmt,'bind_param'),$ids);
$stmt->execute();
$stmt->bind_result($tag_id, $tag_name, $tag_desc, $tag_popularity);

while ($stmt->fetch()) {
printf ("%s\n", $tag_name);
}

如果 implode array_fill 令人困惑,它只是创建与 $ids 大小相同且充满 "?",然后将它们转换为 csv。

更新:非绑定(bind)参数方式

当然,如果你想跳过 bind params 废话,并且你可以相信 $ids 列表已经被清理过,你可以这样做,跳过 bind_params 部分:

$rawQuery = 'SELECT * FROM core_tags WHERE tag_id IN (';
$rawQuery .= implode(',',$ids);
$rawQuery .= ') GROUP BY tag_id ORDER BY tag_popularity ASC';

如果您不相信数据:

function clean_ids(&$item){
$item = intval($item);
}

$clean_ids = array_walk($ids,'clean_ids');
$rawQuery = 'SELECT * FROM core_tags WHERE tag_id IN (';
$rawQuery .= implode(',',$clean_ids);
$rawQuery .= ') GROUP BY tag_id ORDER BY tag_popularity ASC';

关于php - 在 where 中使用 IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3269407/

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