2016-05-01 3 views
0

Я пытаюсь вставить в мою базу данных символ ' и поставить код ниже.Почему не работает mysql_real_escape_string?

$actionurl =$_POST['actionurl']; 
$newtitle = $_POST['newtitle']; 
$newtitle = mysql_real_escape_string($newtitle); 
$result2 = mysql_query("UPDATE links SET title='$newtitle' WHERE url='$actionurl'") 
    or die(mysql_error()); 

И я получаю эту ошибку

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ним, чтобы запустить образец библиотеки (нить форума) '' по строке 1

Почему я получаю сообщение об ошибке, если я используя mysql_real_escape_string на переменной $newtitle?

+4

Зачем использовать устаревший API в любом случае. Используйте подготовленные заявления, и ваши проблемы исчезнут. –

+0

Для записи вы действительно вставляете '' 'используя поле' newtitle' и не используете 'actionurl'? – Rick

+2

Пожалуйста, не используйте 'mysql_ *'] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php?rq=1); функции 'mysql_ * 'устарели, [устарели] (http://us3.php.net/manual/en/intro.mysql.php) и небезопасны. Используйте ['MySQLi'] (http://us3.php.net/manual/en/book.mysqli.php) или [' PDO'] (http://us3.php.net/manual/en/intro. pdo.php) и использовать подготовленные заявления. Как сказал @juergend, это лучший подход и решает вашу проблему. –

ответ

-1

Есть ли волшебные кавычки в вашем php.ini? Если да, отключив его, вы должны решить свою проблему. (Он может быть включен по умолчанию)

+0

Нет волшебных цитат. – desbest

+0

http://php.net/manual/en/security.magicquotes.disabling.php - добавьте рекомендуемые строки в php.ini - я полагаю, что в вашей системе по умолчанию включены магические кавычки - и не забывайте перезапустите Apache. –

+0

Вместо того, чтобы проголосовать за этот пост, вы действительно попробовали мое предложение? Я согласен с другими, что теперь лучше использовать PDO вместо интерфейса mysql_, но настоящая причина поведения в этом сообщении должна действительно быть связана с включенными магическими кавычками. Вы можете найти другие сообщения даже на этом веб-сайте с точно таким же поведением и тем же объяснением. –

1

Я подозреваю, что это действие, вызывающее ошибку, а не $ newtitle.

Чтобы отладить это, эхо или распечатать инструкцию SQL, которая будет выполнена.

Вы можете сделать что-то вроде этого:

$sql = "UPDATE links SET title='$newtitle' WHERE url='$actionurl'"; 
// for debugging, output contents of the $sql string 
echo "SQL=" . $sql ; 
mysql_query($sql) or die(mysql_error(); 

Как другие уже предложили, интерфейс mysql_ является устаревшим. Новая разработка должна использовать либо mysqli, либо PDO. И используйте подготовленные заявления со связями-заполнителями. В 2016 году было просто бессмысленно бороться с mysql_real_escape_string.

+0

Но я могу использовать 'mysql_' в php 7 с этим классом, который преобразует' mysql_' в 'mysqli_' http://www.phpclasses.org/package/9199-PHP-Replace-mysql-functions-using-the- mysqli-extension.html – desbest

+0

Кажется, проблема может быть связана с пакетом, который вы используете для реализации функций mysql_, которые * были удалены * из PHP 7. Возможно, возникла проблема с реализацией mysql_real_escape_string из этого пакета. – spencer7593

Смежные вопросы