我有一种情况,我想在数组中添加一个名称列表,并在SQL查询中使用它。
我是怎么做到的:
$names = implode(',', $names);
$sql = "DELETE FROM product WHERE name NOT IN ($names)";
如果我使用id(但我不能在这里做),这可以正常工作。问题是 - 名称中可以包含逗号(即 - benchpress rack, blue
)并且会破坏此查询。有没有办法绕过这个问题?
答案 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。