我有一个数组:
$array = array ( option( 'one' ), option( 'two' ) );
输出:
array(2) { [0]=> string(7) "result1" [1]=> string(7) "result2" }
和 SQL 选择:
SELECT * FROM xx WHERE url IN (".implode(',',$array).") ORDER BY id DESC
但输出是:
array(0) { }
如果我在 mysql 中运行 SELECT,结果是正确的,但在 php 页面中不起作用。
如果 $array
中的值是字符串,则查询的语法无效。考虑一下:
$array = ['foo', 'bar'];
$q = "SELECT * FROM xx WHERE url IN (".implode(',',$array).") ORDER BY id DESC";
生成的查询将是:
SELECT * FROM xx WHERE url IN (foo, bar) ORDER BY id DESC
而您需要:
SELECT * FROM xx WHERE url IN ("foo", "bar") ORDER BY id DESC
将内爆更改为如下所示的内容:
$q = "SELECT * FROM xx WHERE url IN ('".implode("','",$array)."') ORDER BY id DESC";
请注意我添加的单引号,现在生成的查询将在 IN 子句中包含带引号的字符串:
SELECT * FROM xx WHERE url IN ('foo', 'bar') ORDER BY id DESC
话虽如此,将字符串连接到查询中仍然容易受到 SQL 注入的影响。您应该考虑学习预准备语句,并开始使用它们
你忘了一些引号:
SELECT * FROM xx WHERE url IN ('".implode("','",$array)."') ORDER BY id DESC
^---^
^-------------------------^
没有这些,你正在生成
... IN (one','two) ...
这是一个彻头彻尾的语法错误。而且由于您没有提到出现任何错误,因此您的代码中可能绝对没有错误处理,并且只是假设成功 - 这完全是错误的做法。