10

我正在使用一个 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 代码都可以正常工作,我自己独立测试过。

非常感谢任何帮助,谢谢。

4

5 回答 5

22

您是否 1000% 确定其中$_POST["likeMsg"]确实包含某些内容?

至于mysql_real_escape_string()返回一个空值, 手册说只有一种情况会发生这种情况:

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

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

于 2010-06-09T11:00:36.447 回答
14

由于其他答案没有明确具体做什么,这是我的:

当你这样做

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

你需要像这样逃跑:

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

注意:因为人们对此表示反对(WTF!?),这是官方 php 手册的官方页面,上面写着我发布的内容:real_escape_string @ PHP Manual

于 2013-04-23T15:23:21.567 回答
3

对于现在可能再次发现此问题的人,我在从 PHP5 迁移到 PHP7 时遇到了这个问题。我从

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

到:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

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

于 2016-09-18T00:37:45.753 回答
1

执行 $_POST['likeMsg'] 的 var_dump 和 $likeMsg 的 var_dump。这为您提供了有关问题所在的信息。

于 2010-06-09T11:02:14.560 回答
0

如果您尚未连接到数据库,mysql_real_escape_string() 将返回空白响应...

于 2016-11-13T19:19:00.253 回答