Этот запрос не вставлен, когда переменная $ subject имеет одинарные кавычки. Есть ли доступное решение?
mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');");
Рассмотрим, например, использование параметризованных запросов с использованием 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 также