mysql_real_escape_string () просто создает пустую строку? - PullRequest
10 голосов
/ 09 июня 2010

Я использую 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 работает нормально, я сам проверил его самостоятельно

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

Ответы [ 5 ]

22 голосов
/ 09 июня 2010

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

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

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

здесь, похоже, дело обстоит иначе, поскольку у вас открытое соединение.Странно.

14 голосов
/ 23 апреля 2013

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

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

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

, вам нужно сбежать так:

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

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

3 голосов
/ 18 сентября 2016

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

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

на:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

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

1 голос
/ 09 июня 2010

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

0 голосов
/ 13 ноября 2016

mysql_real_escape_string () вернет пустой ответ, если вы не установили соединение с базой данных ...

...