如何处理我的MySQL数据库中的撇号,这会丢掉我的查询?

时间:2010-08-27 22:14:32

标签: php mysql sql-injection

我有一个从CSV文件创建的SQL文件。它包括美国所有大都市区的名称,以及一些有关其人口的统计数据。我编写了一个PHP脚本,它接收填充数据,将其转换为图表,并将其粘贴到城市的行中,位于不同的列中。这个剧本运行良好,直到它来到爱达荷州Coeur d'Alene。我认为这是因为城市名称中的撇号(单引号)。这是代码:

$query = "UPDATE population SET `$columnname`='$chart_url' WHERE name = '$cityname'";
            mysql_query($query) or die;

所以它通过将其与城市名称相匹配来找到该行。由于数据的原因,没有任何其他方法可以做到这一点。有没有办法处理SQL文件中已经没有未转义字符的数据?

3 个答案:

答案 0 :(得分:5)

$escapedCityname = mysql_real_escape_string($cityname);

Escape您的数据!如果可以,请使用binding

答案 1 :(得分:5)

PDO与命名参数一起使用。它使代码更易于维护,更安全,更快速,并通过避免字符串连接的危险来逃避数据。

mysql_ *函数已过时。如果您必须使用这些功能,请使用mysql_real_escape_string来覆盖您的数据。

答案 2 :(得分:2)

您的数据可以包含撇号 - 但您需要在代码中转义:

// You should not use url values directly! The can be hijacked...
// You should write a safe solution here
$column_name = $chart_url;

// Replace cityname with escaped city name
$cityname = mysql_real_escape_string($cityname)
$query = "UPDATE population SET `$columnname`='$column_name' WHERE name = '$cityname'";
            mysql_query($query) or die;

为什么使用动态列名:$ columnname?