MySQL SELECT WHERE IN数组

时间:2016-10-10 23:29:58

标签: php mysql

我有一种情况,我想在数组中添加一个名称列表,并在SQL查询中使用它。

我是怎么做到的:

$names = implode(',', $names);
$sql = "DELETE FROM product WHERE name NOT IN ($names)";

如果我使用id(但我不能在这里做),这可以正常工作。问题是 - 名称中可以包含逗号(即 - benchpress rack, blue)并且会破坏此查询。有没有办法绕过这个问题?

1 个答案:

答案 0 :(得分:1)

试试这个:

$names = implode("','", $names);
$sql = "DELETE FROM product WHERE name NOT IN ('$names')";

如果这是您的实际代码,我建议您切换到PDO,使用库,或使用mysqli_real_escape_string转义您的值。

这是一个链接:http://php.net/manual/en/mysqli.real-escape-string.php

这是一个关于准备好的陈述的w3schools链接,这是一个关于它们如何工作的体面的高级视图:http://www.w3schools.com/php/php_mysql_prepared_statements.asp

以下是使用PDO时语句查询的运行方式:

$query= $conn->prepare("DELETE FROM product WHERE name NOT IN (:names)");
$query->bindParam(':names', $names);
$query->execute();

对于mysqli,它将是类似的,请参阅上面的w3schools链接以了解差异。

我强烈建议你离开旧的mysql驱动程序,至少切换到mysqli。