Как мне справиться с апострофом в моей базе данных MySQL, который отбрасывает мои запросы? - PullRequest
1 голос
/ 28 августа 2010

У меня есть файл SQL, который я создал из файла CSV. Он включает в себя названия всех городских районов в Соединенных Штатах, а также некоторые статистические данные об их населении. Я написал PHP-скрипт, который берет данные о населении, превращает их в диаграмму и вставляет обратно в строку города, в другой столбец. Этот сценарий работал хорошо, пока он не пришел в Кер-д'Ален, штат Айдахо. Я предполагаю, что это из-за апостроф (одиночная кавычка) в названии города. Вот код:

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

Итак, он находит строку, сопоставляя ее с названием города. Нет другого способа сделать это из-за данных. Есть ли способ обработки данных, в которых уже есть неэкранированные символы в файле SQL?

Ответы [ 3 ]

5 голосов
/ 28 августа 2010

Используйте PDO с именованными параметрами. Это делает ваш код более понятным, безопасным, быстрым и ускользает от ваших данных, избегая опасностей конкатенации строк.

mysql_ * функции устарели. Если вы должны использовать эти функции, тогда выделите ваши данные с помощью mysql_real_escape_string .

5 голосов
/ 28 августа 2010
$escapedCityname = mysql_real_escape_string($cityname);

Побег ваши данные! И если вы можете использовать переплет .

2 голосов
/ 28 августа 2010

Ваши данные могут иметь апострофы, но вам нужно уйти в коде:

// 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...