我有一个从CSV文件创建的SQL文件。它包括美国所有大都市区的名称,以及一些有关其人口的统计数据。我编写了一个PHP脚本,它接收填充数据,将其转换为图表,并将其粘贴到城市的行中,位于不同的列中。这个剧本运行良好,直到它来到爱达荷州Coeur d'Alene。我认为这是因为城市名称中的撇号(单引号)。这是代码:
$query = "UPDATE population SET `$columnname`='$chart_url' WHERE name = '$cityname'";
mysql_query($query) or die;
所以它通过将其与城市名称相匹配来找到该行。由于数据的原因,没有任何其他方法可以做到这一点。有没有办法处理SQL文件中已经没有未转义字符的数据?
答案 0 :(得分:5)
答案 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?