2010-06-09 70 views
10

我正在使用一個名爲like.php的頁面使用jQuery AJAX請求,該頁面連接到我的數據庫並插入一行。這是like.php代碼:mysql_real_escape_string()只是一個空字符串?

<?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代碼工作正常,我已經獨立測試它自己。

任何幫助非常感謝,謝謝。

+0

在執行SQL之前,執行'var_dump($ likeMsg); echo $ sql;死;看看這些變量包含什麼。之後,如果可以,將SQL輸出粘貼到phpMyAdmin並檢查結果。 – hsz 2010-06-09 11:03:41

回答

22

您是否確定$_POST["likeMsg"]確實包含某些東西?

至於mysql_real_escape_string()返回空值時,manual說,只有一種情況可能發生:

注:MySQL的連接使用mysql_real_escape_string之前,需要(),否則一個E_WARNING級的錯誤生成,並返回FALSE。如果未定義link_identifier,則使用最後一個MySQL連接。

儘管這似乎並不是這種情況,因爲您確實已打開連接。奇怪。

+0

我讀過,當我google'd問題。儘管我在使用'mysql_real_escape_string()'之前已經啓動了數據庫連接。 – 2010-06-09 11:02:26

+0

@詹姆斯那麼它一定是那個數據本身。你可以顯示'$ _POST'的轉儲嗎? – 2010-06-09 11:03:41

+0

@James或者,你可以嘗試明確指定連接作爲參數嗎? – 2010-06-09 11:15:58

1

執行$ _POST ['likeMsg']的var_dump和$ likeMsg的var_dump。這給你提供錯誤信息。

13

至於其他的答案不明確究竟是什麼做的,這裏是我的:

當你

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

你需要逃避這樣的:

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

注意:因爲人們對這個(WTF !?)進行了低估,這裏是官方php手冊的官方頁面,它說明了我發佈的內容:real_escape_string @ PHP Manual

+2

+1我查看了文檔。也許人們更喜歡看程序形式而不是面向對象的形式。 – Ryan 2013-12-14 10:26:42

+0

這對我有用,upvoted:D – 2016-08-24 15:47:07

+0

這是一個真正有用的職位感謝的人 – PhpDude 2016-11-19 01:38:06

1

對於現在可能再次發現此問題的人,我剛剛遇到了此問題,因爲我正在從PHP5遷移到PHP7。我是從

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

變化:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

所以,換句話說,數據庫$鏈接不再是可選的,並移動到第一個參數的位置。如果不用,它會返回一個空字符串,顯然沒有錯誤。

0

如果您尚未建立與數據庫的連接,mysql_real_escape_string()將返回空白響應...

相關問題