Проблема с апострофом при вставке в MySQL - PullRequest
1 голос
/ 13 января 2012

У меня есть скрипт, в котором я отправляю некоторые поля, которые вводятся в базу данных MySQL, когда я отправляю его, теперь он успешно проходит, но никогда не вставляется в базу данных, если в одном из полей есть апостроф. Что я могу изменить, чтобы заставить это работать?

if ($_POST) {
$name = trim($_POST['your_name']);
$email = trim($_POST['your_email']);
$answers = $_POST['answers'];
$i = 0;
foreach ($answers as $a) {
    if (trim($a))
        $i++;
}

if ($name && $email && $i >= 40) {
    $array = array();
    $q = mysql_query("select * from fields");
    while($f = mysql_fetch_array($q))
        $array[$f['label']] = $answers[$f['ID']];

    $array = serialize($array);
    $time = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    $token = md5($time);

    $result = mysql_query("insert into data (submit_name, submit_email, submit_data, submit_confirm, submit_time, submit_ip, submit_token) 
        values ('$name', '$email', '$array', '0', '$time', '$ip', '$token')");

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Вам необходимо экранировать символы с особым значением в MySQL в ваших данных .

Быстрый и грязный способ улучшить ваш код состоит в том, чтобы пропустить все ваши строки через mysql_real_escape_string перед вставкой их в строку SQL.

Лучшим подходом было бы переключиться с mysql_query на то, что позволяет использовать связанных параметров (предпочтительно с подготовленными утверждениями) .

0 голосов
/ 13 января 2012

Используйте mysql_real_escape_string(), так как это устранит проблему с апострофом и хотя бы частично поможет избежать атак с использованием SQL-инъекций. Если вы не хотите пачкать руки встроенной библиотекой PDO PHP, вы можете рассмотреть уровень абстракции базы данных (DBAL). ADODB является примером.

...