यह दुर्भाग्य से क्वेरी पैरामीटर के उपयोग के लिए एक अजीब अपवाद है (संपादित करें: लेकिन जाहिरा तौर पर प्रत्येक MySQL शाखा के सबसे हालिया बिंदु-रिलीज़ में नहीं, नीचे देखें)।
AGAINST()
. में पैटर्न चाहिए एक स्थिर स्ट्रिंग बनें, क्वेरी पैरामीटर नहीं। SQL क्वेरीज़ में अन्य स्थिर स्ट्रिंग्स के विपरीत, आप यहाँ क्वेरी पैरामीटर का उपयोग नहीं कर सकते, केवल MySQL में एक सीमा के कारण।
खोज पैटर्न को सुरक्षित रूप से क्वेरी में शामिल करने के लिए, PDO::quote() समारोह। ध्यान दें कि पीडीओ का उद्धरण () फ़ंक्शन पहले से ही उद्धरण सीमांकक जोड़ता है (mysql_real_escape_string () के विपरीत)।
$quoted_search_text = $this->db->quote('+word +word');
$sql = $this->db->prepare("SELECT ... FROM search_table
WHERE MATCH(some_field) AGAINST($quoted_search_text IN BOOLEAN MODE");
@YourCommonSense की ओर से दोबारा टिप्पणी करें:
आप सही कह रहे हैं, मैंने अभी-अभी MySQL 5.5.31, 5.1.68, और 5.0.96 पर इसका परीक्षण किया है (MySQL सैंडबॉक्स एक अद्भुत उपकरण है), और ऐसा लगता है कि ये संस्करण AGAINST() खंड में क्वेरी पैरामीटर स्वीकार करते हैं। गतिशील एसक्यूएल क्वेरी।
मुझे अभी भी अतीत में मौजूद एक संघर्ष का स्मरण है। हो सकता है कि इसे प्रत्येक शाखा के सबसे हालिया बिंदु-विमोचन में ठीक किया गया हो। उदाहरण के लिए, मुझे ये संबंधित बग मिलते हैं:
- AGAINST() क्लॉज में संग्रहीत कार्यविधि पैरामीटर का उपयोग करने से हमेशा एक ही परिणाम मिलता है:http://bugs.mysql.com/bug.php?id=3734
- तैयार किए गए कथन के साथ क्रैश या अजीब परिणाम, MATCH और FULLTEXT:http:// Bugs.mysql.com/bug.php?id=14496