This question already has answers here:
How can I prevent SQL injection in PHP?
                                
                                    (28个答案)
                                
                        
                                3年前关闭。
            
                    
我有一种情况,我想在数组中添加名称列表,并在SQL查询中使用它。

我该怎么做:

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


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

最佳答案

尝试这个:

$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。

09-25 16:15
查看更多