将IN()运算符与内爆数组-mySQL一起使用时遇到困难


Difficulty using IN() operator with an imploded array - mySQL

对可能的重复问题的回答-请注意,虽然对一些(也许更有经验的)程序员来说,这可能看起来是一个重复的问题,但对像我这样的人来说,这不是:-(被指示为重复的问题不能解决我的问题,而公认的答案完美地解决了问题。


根据许多SO文章(包括这篇文章),为了对数组使用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) . ')"); 

您需要用引号将颜色括起来,如

$colors_Array = array('Black','Royal_Blue','Dodger_Blue','Red');
$stmt = $conn->prepare("SELECT * FROM products WHERE products.Color IN ('" . implode("','", $colors_Array) . "')");

附加的一组引号在数组中的每个单独项目周围放置一组引号-"黑色"、"皇家蓝"、"道奇蓝"answers"红色"