mysql_real_escape_string()只是一个空字符串?

时间:2010-06-09 10:58:16

标签: php mysql ajax mysql-real-escape-string

我正在对名为like.php的页面使用jQuery AJAX请求,该页面连接到我的数据库并插入一行。这是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 个答案:

答案 0 :(得分:22)

您是否确保$_POST["likeMsg"]实际包含某些内容?

至于mysql_real_escape_string()返回一个空值,manual表示只有一种情况可能发生:

  

注意:在使用mysql_real_escape_string()之前需要MySQL连接,否则会生成级别为E_WARNING的错误,并返回FALSE。如果未定义link_identifier,则使用最后一个MySQL连接。

但这似乎并非如此,因为您确实打开了连接。奇怪。

答案 1 :(得分:14)

由于其他答案并不清楚究竟要做什么,这里是我的:

当你这样做时

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

你需要像这样逃跑:

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

注意:因为人们正在低估这个(WTF!?),这里是官方php手册的官方页面,它说明了我发布的内容:real_escape_string @ PHP Manual

答案 2 :(得分:3)

对于那些现在可能再次发现这一点的人来说,我只是遇到了这个问题,因为我正在从PHP5迁移到PHP7。我正在改变

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

为:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

因此,换句话说,数据库$链接不再是可选的,并移动到第一个参数位置。如果省略,它会返回一个空字符串,显然没有错误。

答案 3 :(得分:1)

执行$ _POST ['likeMsg']的var_dump,以及$ likeMsg的var_dump。这可以为您提供有关出错的信息。

答案 4 :(得分:0)

如果你没有连接数据库,mysp_real_escape_string()将返回空白响应...