2012-06-20 12 views
27
में क्वेरी की तरह लागू

मैं पीडीओपीडीओ

में की तरह लागू करने में समस्याओं चला रहा हूँ मैं इस प्रश्न हैं:

$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'"; 
$params = array($var1, $var2); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

मैं जाँच की $var1 और $var2 उनमें शामिल दोनों शब्दों मैं खोज करना चाहते हैं, मेरे पीडीओ ठीक काम कर रहा है क्योंकि मेरे कुछ प्रश्न SELECTINSERT वे काम करते हैं, यह सिर्फ पीडीओ में LIKE में परिचित नहीं है।

परिणाम कोई भी वापस नहीं आया है। क्या मेरे $query वाक्य रचनात्मक रूप से सही है?

उत्तर

61

आप $params में % संकेत, क्वेरी में नहीं शामिल करने के लिए है:

$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

आप में उत्पन्न क्वेरी को देखो चाहते हैं तो आपका पिछला कोड, आपको SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%' जैसे कुछ दिखाई देगा, क्योंकि तैयार कथन पहले से उद्धृत स्ट्रिंग के अंदर आपके मान उद्धृत कर रहा है।

+0

+1 .. लेकिन मुझे नहीं लगता कि जेनरेट की गई क्वेरी को देखने का कोई तरीका है .. क्या ऐसा कुछ भी है? – Vignesh

+0

मेरे जीवन के लिए यह पता नहीं लगा सका और मैं इसके बारे में सब भूल गया था। बहुत बढ़िया जवाब। धन्यवाद! – b3tac0d3

5

नहीं, आपको प्लेसहोल्डर तैयार करने की आवश्यकता नहीं है। इसके अलावा, अपने चर के अंदर% अंक शामिल करें।

LIKE ? 

और चर में: %string%

+0

हम्म, क्षमा, लेकिन मैं काफी यकीन है कि लागू करने के लिए कैसे क्या तुम सिर्फ सुझाव दिया है नहीं कर रहा हूँ। –

+0

मैं मोबाइल पर हूं लेकिन मैं सबसे अच्छा समझाने की कोशिश करूंगा। मेरा संपादन देखें। स्पष्टीकरण के लिए –

4
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 
2

आप उदाहरण के नीचे देख सकते हैं

$title = 'PHP%'; 
$author = 'Bobi%'; 
// query 
$sql = "SELECT * FROM books WHERE title like ? AND author like ? "; 
$q = $conn->prepare($sql); 
$q->execute(array($title,$author)); 

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

1

आप निम्नलिखित का उपयोग करें:

$query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%') 
      OR address LIKE CONCAT('%', :var2, '%')"; 

$ar_val = array(':var1'=>$var1, ':var2'=>$var2); 
if($sqlprep->execute($ar_val)) { ... } 
+0

यह सीधे बाध्य किए गए चर में% जोड़ने से धीमा है। – CristiC