mysql_real_escape_string (), чтобы разрешить 'и " - PullRequest
0 голосов
/ 30 июля 2011

Я задаю новый вопрос, поскольку другой вопрос неактивен и сильно изменился. Мой код БД такой:

$sql2="INSERT INTO $tbl_name(s_id, s_name, s_email, s_content)VALUES('$id', '$s_name', '$s_email', '$s_content')";
$result2=mysql_query($sql2);

if($result2){
echo "Successful<BR>";

}
else {
echo "ERROR";
}

Я могу ввести буквы, но не 'или' - как я могу использовать mysql_real_escape_string (), чтобы это исправить? Спасибо.

Ответы [ 3 ]

6 голосов
/ 30 июля 2011

Просто используйте mysql_real_escape_string(), чтобы экранировать ваши строки перед тем, как вводить их в ваш запрос SQL.

Например:

$s_name_escaped = mysql_real_escape_string($s_name);
$s_email_escaped = mysql_real_escape_string($s_email);
$s_content_escaped = mysql_real_escape_string($s_content);

$sql2="INSERT INTO $tbl_name(s_id, s_name, s_email, s_content)
       VALUES('$id', '$s_name_escaped', '$s_email_escaped', '$s_content_escaped')";


Или, может быть, даже лучше: прекратите использовать старые функции mysql_* и используйте либо mysqli_* или PDO , с подготовленными заявлениями.

0 голосов
/ 30 июля 2011

Вы должны экранировать строковую переменную внутри или снаружи запроса с помощью mysql_real_escape_string:

$name    = mysql_real_escape_string($s_name);
$email   = mysql_real_escape_string($s_email);
$content = mysql_real_escape_string($s_content);

$sql2 = "INSERT INTO $tbl_name(`s_id`, `s_name`, `s_email`, `s_content`) \n";
$sql2.= "VALUES('$id', '$name', '$email', '$content')";
0 голосов
/ 30 июля 2011

mysql_real_escape_string() не мешает вам использовать символы типа 'или', которые могут облегчить внедрение SQL. Он просто экранирует эти символы, поэтому MySQL интерпретирует их как их буквальное значение, а не как команду в запросе. Таким образом, вы отвечаете, просто используйте его. Тебе больше ничего не нужно делать.

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