PHP SQL WHERE name IN (array...)
PHP SQL WHERE name IN (array...)
我有一个数组:
$array = array ( option( 'one' ), option( 'two' ) );
输出:
array(2) { [0]=> string(7) "result1" [1]=> string(7) "result2" }
和一个sql select:
SELECT * FROM xx WHERE url IN (".implode(',',$array).") ORDER BY id DESC
但输出是:
array(0) { }
如果我运行把SELECT改成mysql,结果是正确的,但是在php页面不工作。
您忘记了一些引号:
SELECT * FROM xx WHERE url IN ('".implode("','",$array)."') ORDER BY id DESC
^---^
^-------------------------^
没有这些,你正在生成
... IN (one','two) ...
这是一个彻头彻尾的语法错误。并且由于您没有提到出现任何错误,您的代码中可能完全没有错误处理,并且只是假设成功 - 这完全是错误的做法。
如果 $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 注入攻击。您应该考虑了解准备好的语句,并开始使用它们
我有一个数组:
$array = array ( option( 'one' ), option( 'two' ) );
输出:
array(2) { [0]=> string(7) "result1" [1]=> string(7) "result2" }
和一个sql select:
SELECT * FROM xx WHERE url IN (".implode(',',$array).") ORDER BY id DESC
但输出是:
array(0) { }
如果我运行把SELECT改成mysql,结果是正确的,但是在php页面不工作。
您忘记了一些引号:
SELECT * FROM xx WHERE url IN ('".implode("','",$array)."') ORDER BY id DESC
^---^
^-------------------------^
没有这些,你正在生成
... IN (one','two) ...
这是一个彻头彻尾的语法错误。并且由于您没有提到出现任何错误,您的代码中可能完全没有错误处理,并且只是假设成功 - 这完全是错误的做法。
如果 $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 注入攻击。您应该考虑了解准备好的语句,并开始使用它们