2012-05-16 10 views
5

मुझे एक SQL क्वेरी के LIMIT भाग को बाध्य करने में कोई समस्या है। ऐसा इसलिए है क्योंकि क्वेरी स्ट्रिंग के रूप में पारित की जा रही है। मैंने another Q देखा है जो बाध्यकारी पैरामीटर से संबंधित है, कुछ भी नहीं जो किसी सरणी में नामांकित प्लेसहोल्डर्स से संबंधित है।नामांकित प्लेसहोल्डर्स के साथ पीडीओ/माईएसक्यूएल लिमिटेड को सेट करना

public function getLatestWork($numberOfSlides, $type = 0) { 

$params = array(); 
$params["numberOfSlides"] = (int) trim($numberOfSlides); 
$params["type"] = $type; 

$STH = $this->_db->prepare("SELECT slideID 
    FROM slides 
    WHERE visible = 'true' 
     AND type = :type 
    ORDER BY order 
    LIMIT :numberOfSlides;"); 

$STH->execute($params); 

$result = $STH->fetchAll(PDO::FETCH_COLUMN); 

return $result;   
} 

त्रुटि मैं हो रही है: Syntax error or access violation near ''20'' (20 $numberOfSlides का मूल्य है)

यहाँ मेरी कोड है।

मैं इसे कैसे ठीक कर सकता हूं?

+0

$ पैरामीटर [ "numberOfSlides"] = (intval का उपयोग करके देखें (ट्रिम ($ numberOfSlides)); –

+1

सटीक dup http://stackoverflow.com/questions/10437423/how-can-i-pass-an -एरे-ऑफ-पीडीओ-पैरामीटर-अभी भी-अभी-निर्दिष्ट-उनके-प्रकार/10438026 # 10438026 – goat

उत्तर

9

समस्या यह है कि execute() quotes the numbers और तारों के रूप में व्यवहार करता है:

पुस्तिका से - के रूप में कई तत्वों के साथ मूल्यों की एक सरणी निष्पादित किए जा रहे SQL कथन में बाध्य पैरामीटर हैं। सभी मानों को पीडीओ :: PARAM_STR के रूप में माना जाता है।

<?php 
public function getLatestWork($numberOfSlides=10, $type=0) { 

    $numberOfSlides = intval(trim($numberOfSlides)); 

    $STH = $this->_db->prepare("SELECT slideID 
           FROM slides 
           WHERE visible = 'true' 
           AND type = :type 
           ORDER BY order 
           LIMIT :numberOfSlides;"); 

    $STH->bindParam(':numberOfSlides', $numberOfSlides, PDO::PARAM_INT); 
    $STH->bindParam(':type', $type, PDO::PARAM_INT); 

    $STH->execute(); 
    $result = $STH->fetchAll(PDO::FETCH_COLUMN); 

    return $result; 
} 
?> 
+0

http://www.php.net/manual/en/pdostatement.execute.php#76966 –

+0

विस्तृत स्पष्टीकरण के लिए धन्यवाद , लेकिन अब मुझे एक और समस्या मिली है: 'सख्त मानकों: संदर्भ' –

+0

द्वारा केवल चर को पारित किया जाना चाहिए, मुझे बाइंडपाराम से 'अंतराल (ट्रिम ($ संख्याऑफस्लाइड)) लेना पड़ा, अब यह काम करता है :) –

3

मैं परम बंधन और उनके प्रकार के लिए मजबूर कर सुझाव देंगे:

$STH->bindParam(':numberOfSlides', $numberOfSlides, PDO::PARAM_INT); 
$STH->execute(); 
संबंधित मुद्दे