MySQL Query не вставлен, когда переменная PHP содержит одинарные кавычки

Этот запрос не вставлен, когда переменная $ subject имеет одинарные кавычки. Есть ли доступное решение?

mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');"); 

Related of "MySQL Query не вставлен, когда переменная PHP содержит одинарные кавычки"

Рассмотрим, например, использование параметризованных запросов с использованием PDO .

В качестве альтернативы, заключите свои переменные в скобки {}.

Редактировать:

Я пропустил, что ваша переменная $subject содержит одинарные кавычки. Это означает, что вам нужно избегать их. (См. mysql_real_escape_string() других ответов и mysql_real_escape_string() об этом.) Но, как вы можете видеть, одинарные кавычки внутри переменной – это именно то, как работают инъекционные атаки. Их устранение помогает предотвратить такие проблемы, а также позволяет вашему запросу сохранять ожидаемые данные.

Никакой ответ на инъекции не завершен без ссылки на Bobby Tables .

Избегайте своих параметров.

 $to = mysql_real_escape_string($to); $subject = mysql_real_escape_string($subject); mysql_query("INSERT INTO table (to_email_id, subject) values('$to', '$subject');"); 

Руководство пользователя: mysql_real_escape_string()

Также, пожалуйста, прочитайте об атаках SQL-инъекций .

Ваш запрос будет возвращать ошибку 1064, которая является синтаксической ошибкой в ​​вашем запросе. Это происходит потому, что переменные, в частности $ subject в случае вопроса, изменяют формат вашей вложенной строки. Например, допустим, у нас есть

 $subject = "fire's hotter than it looks"; 

Когда это будет оценено в вашем запросе, ваша строка запроса будет

 INSERT INTO table (to_email_id,subject) VALUES('the value of the to variable','fire's hotter than it looks'); 

Если вы посмотрите на второй элемент в значениях, которые были когда-то $ subject, вы заметите, что теперь у вас есть нечетное число апострофов, означающее, что конец вашего запроса '); является открытой строкой.

Как указано выше, используйте функцию, например mysql_real_escape_string (), чтобы добавить недостающие косые черты.

Быстрая заметка: добавление косой черты к символам типа «и» (\ «, \»). говорит mysql интерпретировать их как строковые символы вместо разделителей строк запроса.

Вам нужно использовать mysql_real_escape_string() для ваших значений $to и $subject

Также, если вы не делали этого, прежде чем открывать для SQL-инъекции

ИСПОЛЬЗОВАНИЕ

mysql_real_escape_string

У вашего запроса есть отличная «дыра» -> SQL-инъекция. Вы должны прочитать об этом подробнее: http://en.wikipedia.org/wiki/SQL_injection, а также здесь http://php.net/manual/en/function.mysql-real-escape-string.php

Чтобы сделать короткий ответ, вы должны «убежать» от значений, переданных в mysql. Лучший способ сделать это – использовать функцию mysql_real_escape_string.

 $query = sprintf("mysql_query("INSERT INTO table (to_email_id,subject) values('%s', '%s');", mysql_real_escape_string($to),mysql_real_escape_string($subject)); mysql_query($query); 

Я надеюсь, что это поможет вам.

если вы используете

(доступны все книги) в качестве объекта $ subject, и вы пытаетесь вставить в mysql

использовать это

 $disc_str = addslashes($subject); 

"INSERT INTO имя таблицы (субъект) value ('$ disc_str')";

он работает для меня в Textarea с tinymce также