質問

というページに対して 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()については、マニュアルのは、それが起こることができる唯一の状況があると言います:

  

注:A 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);

注記:人々がこれに反対票を投じているので(何という!?)、ここに私が投稿した内容を正確に記載した公式 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