के साथ तैयार पीडीओ स्टेटमेंट निष्पादित करना मैं PHP के लिए नया हूं, और परीक्षण MySQL डीबी से कनेक्ट करने के लिए पीडीओ का उपयोग करना सीखने की कोशिश कर रहा हूं। मैं निम्नलिखित है:इसी तरह के क्लॉज
try {
$db = new PDO('mysql:dbname=MYDBNAME;host=MYHOST', 'USERNAME', 'PASSWORD');
$query = "select * from books where ? like '%?%'";
$stmt = $db->prepare($query);
$stmt->execute(array($searchtype, $searchterm));
} catch(PDOException $e) {
echo 'PDOException: ' . $e->getMessage();
}
जब मैं यह कोशिश मैं निम्न चेतावनी: चेतावनी: PDOStatement :: निष्पादित() [pdostatement.execute]: SQLSTATE [HY093]: अमान्य पैरामीटर संख्या: बाध्य चर की संख्या टोकन की संख्या से मेल नहीं खाता
जब मैं इस तरह के खंड को हटाता हूं, और $ searchterm param, तो यह परिणाम ठीक से देता है। मैंने सोचा - जैसे '%?%' - इस क्वेरी को डबल कोट्स के तहत बनाने का कानूनी तरीका नहीं हो सकता है, इसलिए मैंने भागने की कोशिश की, जो काम नहीं कर सका। मैं एक समाधान के लिए चारों ओर देखा, और पाया कि कोई '% और%' ले जाया गया जहां $ SEARCHTERM है करने के लिए नीचे:
$query = "select * from books where ? like ?";
...
$stmt->execute(array($searchtype, '\'%'.$searchterm.'%\''));
मैं एक ही परिणाम मिला।
किसी भी मदद की सराहना की है। धन्यवाद!
/ अद्यतन ****/ मैं http://us3.php.net/manual/en/pdo.prepared-statements.php
उदाहरण # 12 प्लेसहोल्डर का अमान्य उपयोग के उदाहरण 12 पर पाया
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));
// Below is What they suggest is the correct way.
// placeholder must be used in the place of the whole value
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>
मैं इस की कोशिश की, और भले ही मुझे अब चेतावनी नहीं मिली है, मुझे कोई परिणाम नहीं मिला है। हालांकि जब मैं सीधे क्वेरी निष्पादित करता हूं तो मुझे कुछ परिणाम मिलेंगे। कोई विचार?
मुझे वही समस्या मिली, जैसा कि मैंने सोचा था कि '%' जहां मूल्यों के बजाय क्वेरी संरचना का एक हिस्सा है;) – Strae