2013-02-01 11 views
6

का उपयोग कर MySQL क्वेरी समस्याएं तो मेरे पास एक दिलचस्प समस्या है जिसे मैंने कभी नहीं देखा है और इस मुद्दे को ठीक करने के बारे में अधिक जानकारी नहीं मिल रही है। मेरे पास विशाल डेटाबेस है जिसमें इसमें भारी मात्रा में डेटा है (10 साल के लायक), और इसके माध्यम से खोज करने का प्रयास किया गया है।LISE और apostrophe

अब खोज सामग्री ठीक काम करती है, लेकिन हाल ही में किसी ने इसे 'बग' के बारे में मेरे ध्यान में लाया यदि आप करेंगे। मैंने अपेक्षित परिणाम प्राप्त करने के लिए इसे शूट करने में परेशानी करने की कोशिश की है, लेकिन इसका कोई फायदा नहीं हुआ है।

जब कोई खोज में एपोस्ट्रोफ़ी का उपयोग करता है, यह है कि खोज दोष बाहर, लेकिन यह कोई परिणाम नहीं है:

यह मेरा मुद्दा है। तो उदाहरण के लिए जब Pete's खोज क्वेरी निष्पादित करता है लेकिन कुछ भी नहीं देता है। हां, मैं सुनिश्चित करता हूं कि क्वेरी में mysql_real_escape_string() है ताकि Pete'sPete\'s बन जाए।

यहां तक ​​कि जब मैं phpmysql की खोज सुविधा का उपयोग करके इसे क्वेरी करने का प्रयास करता हूं, तो मुझे अजीब परिणाम मिलते हैं। क्वेरी इस तरह के रूप में भेजा जाता है:

SELECT * FROM `smd_article` WHERE `copy` LIKE '%Pete\'s%' 

लेकिन जब मैं phpmyadmin में खोज सुविधा का उपयोग, यह मेरे देता है:

SELECT * FROM `smd_article` WHERE `copy` LIKE '%Pete''s%' 

और जब मैं वास्तव में एसक्यूएल टैब में क्वेरी बाहर टाइप करें, यह अभी भी कोई परिणाम नहीं देता है। लेकिन कुछ 17 के रिकॉर्ड हैं जो वापस आते हैं जब मैं सिर्फ पीट्स का उपयोग करता हूं और कुछ 3k रिकॉर्ड करता हूं जब मैं सिर्फ पेट्स करता हूं।

तो मैं उत्सुक हूं कि मैं क्या गलत कर रहा हूं, या इसे बनाने के लिए गायब हूं ताकि यह लिस्के कथन का उपयोग करके एक प्रश्न में एस्ट्रोफ़े को अनुमति दे सके। विचार? द्वारा mysql_real_escape_string

LIKE '%" . mysql_real_escape_string($find) . "%' 

या

LIKE '%Pete%27s%' 

या यदि

+5

, लेकिन यह जानते हुए भी इस तरह कि वाइल्डकार्ड प्रश्नों क्वेरी करने के लिए सबसे धीमी संभव तरीके से कर रहे हैं लायक है एक डेटाबेस मैं एक छोटी सी टेबल के लिए ठीक हो सकता हूं, लेकिन यदि आपके पास एक मामूली बड़ी मेज भी है, तो यह वास्तव में चीजों को धीमा कर सकती है। चेतावनी दी। – SDC

उत्तर

5

कोशिश आप कर सकते हैं का उपयोग कर रहे पीडीओ आप

$search ='Pete\'s' 
$stmt = $db->prepare("SELECT * FROM `smd_article` WHERE `copy` LIKE ?"); 
$stmt->bindValue(1, "%$search%", PDO::PARAM_STR); 
$stmt->execute(); 
+0

कोई काम नहीं, अभी भी – MrTechie

+1

कोई परिणाम नहीं है तो डेटाबेस में क्या संग्रहीत किया जाता है? क्या यह 'पीट \' या पीट नहीं है?अगर इसका 'पीट' का मतलब है कि आप दूसरे शब्द में '' 'को अनुमति दे रहे हैं तो आपका कोड एसक्यूएल इंजेक्शन –

+1

के लिए व्यवहार्य है, मैंने कभी भी कच्चे डेटा को देखने का विचार नहीं किया। और अब मेरे पास है, मैं इस मुद्दे को देखता हूं। शीर्षक में है: पीट ' एस और सामग्री में पेटी ’ एस - एएच है। मुझे नफरत है कि इस साइट के संपादक कैसे सामग्री कॉपी और पेस्ट करते हैं – MrTechie

1

तरह समस्या ' एकल उद्धरण की वजह से नहीं है। आप इसे ठीक से बच निकला। (Phpmyadmin में खोज समारोह के रूप में):

स्ट्रिंग: पीट

MySQL: 'पीट' की '

तो निम्न क्वेरी काम करेंगे। (मैं इसे परीक्षण किया है)

SELECT * 
FROM `smd_article` 
WHERE copy 
LIKE '%Pete''s%' 

तुम भी IN बयान पर एक नजर है कर सकते हैं:

SELECT * 
FROM `smd_article` 
WHERE copy 
IN (
'Pete', 'Pete''s' 
) 
विषय बंद
+0

इन कथन का उपयोग कर काम नहीं करता – MrTechie

+0

@MrTechie मैंने उदाहरण डेटा के साथ क्वेरी का परीक्षण किया है और यह काम करता है। उद्धरण से बचने की समस्या नहीं है। एक अलग समस्या होनी चाहिए – hek2mgl

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