2011-01-19 12 views
9

मैं अपने mysql डेटाबेस में डालने से पहले एक स्ट्रिंग से बचने के लिए mysql_real_escape_string का उपयोग कर रहा हूं।mysql_real_escape_string और '

सब कुछ ठीक काम कर रहा है, सिवाय इसके कि चरित्र मिस हो रहा है और mysql द्वारा ’ में बदल गया है।

समस्या हल करने के लिए मैं क्या कर सकता हूं? क्या मुझे स्ट्रिंग से बचने के लिए बेहतर फ़ंक्शन का उपयोग करना चाहिए?

मुझे भी चिंता है कि अन्य charachters याद किया जा रहा है और इसी तरह बकवास में बदल दिया जा रहा है!

कृपया मदद करें!

धन्यवाद :)

उत्तर

16

चरित्र 'याद नहीं किया जा रहा है, यह केवल एक चरित्र है जिसका उपयोग स्ट्रिंग को घेरने के लिए mysql द्वारा नहीं किया जाता है, और इससे बचने की आवश्यकता नहीं होती है।

कारण यह अजीब स्ट्रिंग में बदल रहा है क्योंकि यह एक बहु-बाइट चरित्र है, और आप इसे एक बाइट फ़ील्ड में डाल रहे हैं।

+8

स्पष्टीकरण के लिए, 'और' – dqhendricks

+2

+1 के बीच एक अंतर है क्लाइंट/सर्वर एन्कोडिंग समस्या भी हो सकती है (यानी, 'सेट नाम')। – netcoder

+0

धन्यवाद। तो utf-8 में फ़ील्ड एन्कोडिंग को सेट करने से इस तरह की कोई समस्या ठीक होनी चाहिए? – significance

4

आप के बजाय बाँध चर के साथ तैयार बयान का उपयोग करना चाहिए: http://php.net/manual/en/pdo.prepared-statements.php इस तरह से आप कुछ भी से बचने के बारे में चिंता करने की जरूरत नहीं है। मेरे द्वारा लिंक किए गए दस्तावेज़ों में फायदे का उल्लेख किया गया है।

+0

यह किसी भी मात्रा में उद्धरण की तुलना में स्पष्ट रूप से बेहतर लगता है, मुझे आश्चर्य है कि PHP टीम ने मूर्खतापूर्ण पहले प्रयास के रूप में 'mysql_real_escape_string() 'को नहीं हटाया है। – sarnold

2

mysql_real_escape_string() बस आपकी क्वेरी में "सुरक्षित" बनाने के लिए कुछ हद तक पात्रों (\ का उपयोग करके) से बच निकलता है। आपके डेटा (स्टाइल कोट) और आपके कॉलम एन्कोडिंग प्रकार के साथ एक एन्कोडिंग मेल नहीं है। mysql_real_escape_string इस तरह के मुद्दे को कभी हल नहीं करेगा।

+0

क्वेरी में नहीं बल्कि क्वेरी में उद्धरण-सीमित स्ट्रिंग में। अंतर महसूस करें –

1

क्या यह एक फैंसी उद्धरण है? यदि ऐसा है, तो यह चरित्र एन्कोडिंग मतभेदों के कारण शायद आपके डेटाबेस में अस्पष्ट दिखता है। प्रत्येक तालिका में एक संबंधित वर्ण एन्कोडिंग होता है, और कनेक्शन का अपना एन्कोडिंग होता है।

अपनी क्वेरी से पहले "सेट नाम utf8" निष्पादित करने का प्रयास करें। इससे कनेक्शन के एन्कोडिंग को यूटीएफ -8 में सेट किया जाएगा। बेशक, यदि आप यूटीएफ -8 अक्षरों को स्टोर करने की कोशिश कर रहे हैं, तो लैटिन 1 टेबल कहें, आपको अभी भी वह परिणाम नहीं मिलेगा जो आप उम्मीद करते हैं।

0

यह आप पृष्ठ है जहाँ आप डेटाबेस में डेटा डालने कर रहे हैं के शीर्ष पर UTF एन्कोडिंग का उपयोग करने के

प्लेस इस लाइन की जरूरत के लिए एक विशेष चरित्र है कि

header ('Content-type: text/html; charset=utf-8'); 

यह

काम करता है आशा है कि
-1
mysql_real_escape_string(utf8_encode($data)); 

आशा है कि यह काम करेगा।

-1
<?php 
    if(isset($_GET['submit'])) 
    { 
     mysql_connect('localhost','root',''); 
     mysql_select_db('test'); 
     $var=mysql_real_escape_string($_GET['asd']); 
     $sql="INSERT INTO `test`.`asd` (`id` ,`name` ,`desc`)VALUES ('', '$var', 'knkk');"; 
     echo $sql."<br />"; 
     $res=mysql_query($sql) or die('error'); 
     echo $res; 
    } 
?> 

<html> 
<body> 
    <form name="f1" method="get"> 
     <input type="text" name="asd"> 
     <input type="submit" name="submit"> 
    </form> 
</body> 
</html> 

आउटपुट:

test में सम्मिलित करें।asd (id, name, desc) मूल्य ('', 'asd \' lgh ',' knkk ');

enter image description here

0

यह मामले में काम करेंगे आप के साथ mysql संबंध स्थापित किया है: mysql_query ("नाम 'UTF8' सेट");

दूसरे शब्दों में, अगर सेट नाम 'UTF8' सेट नहीं है, utf8_encode जरूरत नहीं है।

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