【发布时间】:2014-11-19 12:08:25
【问题描述】:
对可能重复的问题的回应 - 请注意,虽然对于一些(也许更有经验的)程序员来说,这可能看起来像是一个重复的问题,但对于像我这样的菜鸟来说却不是 :-(被指示为重复的问题并没有解决我的问题,而接受的答案完美地解决了问题。
根据许多 SO 帖子(包括 this one),为了使用 IN() 运算符和数组,您首先需要将其内爆(从而将数组转换为字符串)。
下面的查询与 IN() 语句中的变量一起正常工作,但我似乎无法让它与内爆数组一起工作。
这有效并返回 8 行产品
$colors_VAR = "'Black','Royal_Blue','Dodger_Blue','Red'";
$stmt = $conn->prepare("SELECT * FROM products WHERE products.Color IN ($colors_VAR)");
这不会返回任何结果
$colors_Array = array('Black','Royal_Blue','Dodger_Blue','Red');
$stmt = $conn->prepare("SELECT * FROM products WHERE products.Color IN (' . implode(',', $colors_Array) . ')");
【问题讨论】:
-
echo执行之前的查询。每次您不确定时,请检查您的变量和其他内容。 PS:如果数组不是静态的,您必须使用转义函数对其进行清理或使用准备好的语句。 -
像这样进行字符串连接违背了使用
PDO::prepare的目的。上面的答案显示了如何正确使用它与数组。 (基本上,您根据数组的长度生成?, ?, ?, ...,然后将数组传递给execute,这让PDO 为您完成转义和引用值的工作,这就是您首先使用PDO 的原因地方。) -
@Jordan - 您如何将它与动态生成的数组一起使用?当我无法让代码正常工作时,我创建了最简单的代码来解决这个问题,但数组实际上是由从 db 获取的值动态生成的
-
@ChayaCooper 我不明白这个问题。数组是一个数组,不管它是如何生成的。 (嗯,PHP 有两种数组,关联数组和非关联数组,但不管它们是如何生成的,它们仍然只是数组。)
-
@Jordan - 我想我应该指定动态生成的数组的长度不是恒定的