mysql_real_escape_string () просто создает пустую строку?

Я использую запрос JQuery AJAX на страницу с именем like.php которая подключается к моей базе данных и вставляет строку. Это код like.php :

 <?php // Some config stuff define(DB_HOST, 'localhost'); define(DB_USER, 'root'); define(DB_PASS, ''); define(DB_NAME, 'quicklike'); $link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('ERROR: ' . mysql_error()); $sel = mysql_select_db(DB_NAME, $link) or die('ERROR: ' . mysql_error()); $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg'])); $timeStamp = time(); if(empty($likeMsg)) die('ERROR: Message is empty'); $sql = "INSERT INTO `likes` (like_message, timestamp) VALUES ('$likeMsg', $timeStamp)"; $result = mysql_query($sql, $link) or die('ERROR: ' . mysql_error()); echo mysql_insert_id(); mysql_close($link); ?> 

Проблематичная строка равна $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg'])); , Кажется, что просто возвращает пустую строку, и в моей базе данных под like_message все, что я вижу, это пустые записи. Если я удалю mysql_real_escape_string() но он отлично работает.

Вот мой код jQuery, если он помогает.

 $('#like').bind('keydown', function(e) { if(e.keyCode == 13) { var likeMessage = $('#changer p').html(); if(likeMessage) { $.ajax({ cache: false, url: 'like.php', type: 'POST', data: { likeMsg: likeMessage }, success: function(data) { $('#like').unbind(); writeLikeButton(data); } }); } else { $('#button_container').html(''); } } }); 

Весь этот код jQuery работает отлично, я сам тестировал его самостоятельно.

Любая помощь очень ценится, спасибо.

Вы на 1000% уверены, что $_POST["likeMsg"] действительно что-то содержит?

Что касается mysql_real_escape_string() возвращающего пустое значение, в руководстве говорится, что существует только одна ситуация, когда это может произойти:

Примечание. Перед использованием mysql_real_escape_string () требуется соединение с MySQL, иначе возникает ошибка уровня E_WARNING и возвращается FALSE. Если link_identifier не определен, используется последнее соединение MySQL.

это, кажется, не так, но, поскольку у вас есть соединение открыто. Странный.

Поскольку в других ответах не указывается, что именно делать, вот мой:

Когда вы это сделаете

 $db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE); 

вам нужно бежать следующим образом:

 $newEscapedString = $db_connection->real_escape_string($unescapedString); 

ПРИМЕЧАНИЕ. Поскольку люди сбрасывают это (WTF !?), вот официальная страница официального руководства по php, в котором говорится ТОЧНО, что я опубликовал: real_escape_string @ PHP Manual .

Сделайте var_dump $ _POST ['likeMsg'] и var_dump $ likeMsg. Это дает вам информацию о том, что пошло не так.

Для людей, которые могли бы найти это снова сейчас, я просто столкнулся с этой проблемой, поскольку я перехожу от PHP5 к PHP7. Я меняю

string mysql_real_escape_string(string $unescaped, [resource $link = NULL])

чтобы:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

Таким образом, иными словами, ссылка $ link больше не является необязательной и перемещается в первую позицию аргумента. Если он отсутствует, он возвращает пустую строку без ошибки.

mysql_real_escape_string () вернет пустой ответ, если вы не подключились к базе данных …