2010-06-09 24 views
10

मैं like.php नामक एक पृष्ठ पर एक jQuery AJAX अनुरोध का उपयोग कर रहा हूं जो मेरे डेटाबेस से जुड़ता है और एक पंक्ति डालता है।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.php कोड है। ऐसा लगता है कि बस एक खाली स्ट्रिंग लौटा है, और 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

एसक्यूएल निष्पादित करने से पहले 'var_dump ($ likeMsg) करें; echo $ sql; मर जाओ; 'और देखो कि उन चरों में क्या शामिल है। उसके बाद यदि यह ठीक है, तो SQL आउटपुट को phpMyAdmin में पेस्ट करें और परिणाम जांचें। – hsz

उत्तर

22

क्या आप 1000% सुनिश्चित हैं कि $_POST["likeMsg"] वास्तव में कुछ है?

mysql_real_escape_string() एक खाली मूल्य लौटने का सवाल है, manual कहते हैं सिर्फ एक ही स्थिति है जहाँ कि हो सकता है नहीं है:

ध्यान दें: एक MySQL कनेक्शन mysql_real_escape_string उपयोग करने से पहले आवश्यक है() अन्यथा स्तर E_WARNING की गलती से हुआ है जेनरेट किया गया, और गलत लौटा दिया गया है। यदि link_identifier परिभाषित नहीं किया गया है, तो अंतिम MySQL कनेक्शन का उपयोग किया जाता है।

हालांकि यह मामला प्रतीत नहीं होता है, क्योंकि आपके पास कनेक्शन खुला है। अजीब।

+0

मैंने पढ़ा कि जब मैंने समस्या को Google किया था। मैंने 'mysql_real_escape_string()' का उपयोग करने से पहले डेटाबेस कनेक्शन शुरू किया है। –

+0

@ जेम्स तो यह डेटा स्वयं ही होना चाहिए। क्या आप '$ _POST' का डंप दिखा सकते हैं? –

+0

वैकल्पिक रूप से @ जेम्स, क्या आप पैरामीटर के रूप में कनेक्शन को स्पष्ट रूप से निर्दिष्ट करने का प्रयास कर सकते हैं? –

1

$ _POST ['likeMsg'] का var_dump करें, और $ likeMsg का var_dump करें। इससे आपको गलत जानकारी मिलती है।

13

अन्य उत्तर के रूप में नहीं बनाते हैं स्पष्ट वास्तव में क्या करना है, यहाँ है मेरी:

जब आप

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

आप इस तरह से बचने के लिए की जरूरत है:

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

नोट : क्योंकि लोग इस (डब्ल्यूटीएफ !?) को कम कर रहे हैं, यहां आधिकारिक PHP मैनुअल का आधिकारिक पृष्ठ है जो कि मैंने जो पोस्ट किया है, वह बिल्कुल है: real_escape_string @ PHP Manual

+2

+1 मैंने दस्तावेज़ों को देखा। हो सकता है कि वस्तु ऑब्जेक्ट उन्मुख रूप के बजाय प्रक्रियात्मक रूप को देखने के लिए अधिक उपयोग करें। – Ryan

+0

यह मेरे लिए काम करता है, ऊपर की ओर: डी –

+0

वास्तव में सहायक पोस्ट धन्यवाद आदमी – PhpDude

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() यदि आपने डेटाबेस से कनेक्शन नहीं बनाया है तो रिक्त प्रतिक्रिया वापस कर देगा ...

संबंधित मुद्दे