我使用一个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连接使用mysql_real_escape_string之前需要()否则产生水平E_WARNING的错误,并返回FALSE。如果没有定义link_identifier,则使用最后一个MySQL连接。

这似乎并不在这里是如此,虽然,因为你有打开的连接。奇怪。

其他提示

至于其他的答案不明确究竟是什么做的,这里是我的:

当您

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

您需要逃避这样的:

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

请注意:因为人们downvoting这(WTF!?),这里的官方PHP手册的官方页面,上面写着正是我已经张贴:的 real_escape_string @ PHP手册

有关人谁可能会再次现在可以发现这一点,我只是碰到了这个问题,因为我从迁移到PHP5 PHP7。我是从改变

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

为:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

因此,换句话说,数据库$链路不再是可选的,并移动至第一个参数的位置。如果遗漏了,它返回一个空字符串,没有发生错误,显然。

执行$ _POST [ 'likeMsg']的一个的var_dump,和$ likeMsg的的var_dump。这就给了你什么不顺心的信息。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top