PHP / MySQL - ошибка синтаксиса SQL?

0

Теперь, когда я отправляю символ ', я получаю следующую ошибку, указанную ниже, другую, что все в порядке, когда я отправляю слова. Я использую htmlentities(), и я все еще получаю эту ошибку.

Как я могу предотвратить эту ошибку? Есть ли способ разрешить или преобразовать или остановить отображение символа ' как ошибку?

Вот ошибка, которую я получаю.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''')'
  • 0
    @Pascal MARTIN и @Josh Davis оба ваших ответа помогли мне исправить мою проблему. Так что я действительно не знаю, кого наградить, поэтому я позволю ТАК решать.
Теги:

3 ответа

6

Вам нужно избежать строк, которые вы отправляете в своих SQL-запросах.

Для этого вы можете использовать функцию mysql_real_escape_string.

Например, ваш код может выглядеть так (не проверен, но что-то вроде этого должен сделать трюк):

$str = "abcd'efh";
$sql_query = "insert into my_table (my_field) values ('" 
  . mysql_real_escape_string($str)
  . "')";
$result = mysql_query($sql_query);


Другое решение (потребует больше работы, хотя, поскольку вам придется менять больше кода) было бы использовать подготовленные инструкции; либо mysqli_* или PDO - - но не возможно со старым расширением mysql_*.


Изменить:, если это не сработает, можете ли вы изменить свой вопрос, чтобы дать нам больше информации? Как часть кода, которая вызывает ошибку?

  • 0
    Я тоже этим пользуюсь? все еще я получаю эту ошибку.
0

введите ваш SQL-запрос в переменную, например.

$query = "SELECT * FROM table WHERE field= ".mysql_real_escape_string($var)."";

echo $query;

$result = mysql_query($query);

вы можете проверить, что фактически отправлено mysql в качестве запроса

0

Вам нужно избегать строк, используя соответствующий метод. Вы не указали, какие функции PHP вы используете, поэтому трудно догадаться. Вы должны опубликовать соответствующий фрагмент PHP, но вот несколько примеров:

$text = "x'x";

// MySQL extension
mysql_query($db, "INSERT INTO table VALUES ('" . mysql_real_escape_string($text, $db) . "')");

// MySQLi extension
$db->query("INSERT INTO table VALUES ('" . $db->mysql_real_escape_string($text) . "')");

// PDO prepared statement
$stmt = $pdo->prepare('INSERT INTO table VALUES (:myvalue)');
$stmt->execute(array(
    'myvalue' => $text
));

// Another example
$stmt = $pdo->prepare(
    'SELECT *
       FROM users
      WHERE first_name = :first
        AND last_name  = :last'
);

$stmt->execute(array(
    'first' => 'John',
    'last'  => 'Smith'
));

foreach ($stmt as $row)
{
    echo $row['user_id'];
}

Я настоятельно рекомендую использовать PDO подготовленные заявления, он короче в типе и проще использовать в конечном итоге.

  • 0
    Что такое PDO, о которых я действительно никогда не слышал? Есть ли учебники по PDO, не включая php.net, которые я буду проверять через секунду?
  • 0
    Добавлена ссылка на руководство и еще один пример для PDO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню