gpt4 book ai didi

php - PDO where IN 语句始终为空

转载 作者:行者123 更新时间:2023-11-29 12:19:05 26 4
gpt4 key购买 nike

由于时间太长(超过 14 -.-"),我一直在不停地工作,而且我快要睡着了。也许这就是为什么我浪费了 2 个多小时来试图理解为什么我的 PDO 查询不正常的原因。正在工作。这是查询:

$query = $mysql->prepare('SELECT * FROM table '.$where.'');
$query->execute($clauses);

当然,在它之前我定义了 $where 和 $clauses:

$where["country"] = "country IN (:country)"; 
$clauses["country"] = "'".implode("','",array_keys($countries))."'"

表格的每一行都有一个“国家/地区”列,其中包含国家/地区 ISO 代码(例如 FR、ES、IT、DE、US...)。我的 $countries 包含一个 key => value 数组,如下所示:

Array
(
ES => Spain
IT => Italy
DE => Germany
)

总之,您清楚地了解这是我的 $where:

country IN (:country)

同时我的 $clauses 是:

'ES','IT','DE'

换句话说,完整的查询字符串是:

country IN ('ES','IT','DE')

别担心,当然前面还有WHERE语句。解释的查询是这样的:

SELECT * FROM table WHERE country IN ('ES','IT','DE')

它适用于 PHPMyAdmin,但 PDO 总是返回一个空数组,我 99% 确定这是因为 IN() 内部没有任何内容。我知道这一点是因为如果我将 IN() 更改为 NOT IN() 查询将返回数据库的所有行。 NOT IN(null) - 是的,这是我知道的伪代码 - 在我看来意味着“一切”。这下我震惊了。

如果您认为该脚本很奇怪或者您觉得它很愚蠢或者您认为问题出在其他地方,请不要关注此问题。这只是一个例子。您在这里看到的不是真正的代码,不,其他地方没有任何问题。我已经调试好了一切。感谢您抽出时间。

最佳答案

由于您必须使用许多占位符而不是一个,因此在这种情况下不能使用命名占位符,因为您不知道数组值。您可以使用 assoc 数组并使用命名参数在循环中构建查询。但为了简单起见,PDO 中的 IN 子句的工作方式如下:

$quest = implode(',',array_fill(1,count($ar),'?'));

这里我们制作了所需数量的未知占位符:?,?,?,? ...

$col = 'cats';
$table = 'pets';
$sql = sprintf('DELETE FROM %s WHERE %s IN (%s)', $table, $col, $quest);

在这里,我们使用sprintf组合了有效的删除SQL

然后准备并执行

return $this->handler->prepare($sql)->execute($ar);

关于php - PDO where IN 语句始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29313631/

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