2012-06-22 12 views
5

संभव डुप्लिकेट देख सकते हैं:
PDO Prepared Statementsमैं कैसे एक तैयार पीडीओ एसक्यूएल वक्तव्य

मुझे यकीन है कि इसका जवाब बहुत सरल है, लेकिन मैं नहीं लग रहे हैं इसे खोजने में सक्षम

मैं एक MySQL डेटाबेस के विरुद्ध एक क्वेरी चलाने के लिए पीडीओ (PHP डेटा ऑब्जेक्ट्स) का उपयोग कर रहा हूं, और इसे डीबी के खिलाफ निष्पादित करने से पहले तैयार क्वेरी को प्रदर्शित करने में उपयोगी लगेगा।

क्या ऐसा करने का कोई तरीका है? उदाहरण के लिए:

$query = 'SELECT Id, Name, Comment FROM Users WHERE Id = :id'; 
$pdoStatement = $db->prepare($query); 
$pdoStatement->bindValue(':id', $id); 

// How can I view the actual statement that will be executed, showing the real 
// value that will be used in place of ':id' 

$pdoStatement->execute(); 
+0

यह यहाँ चर्चा की है http://stackoverflow.com/questions/2411182/how-to-debug-pdo-database-queries और http: //stackoverflow.com/questions/6961897/php-pdo-how-can-i-display-the-query-pdo-just-prepared – Bob

+0

मैंने स्पष्ट रूप से बहुत अच्छी खोज नहीं की, जिस गति पर आप दोनों को मिला अन्य पदों। – Bryan

+0

@ ब्रायन यह दाएं हाथ के संबंधित प्रश्न पैनल में पहला था! – lonesomeday

उत्तर

3

आपको सर्वर पर भेजी गई क्वेरी नहीं मिल सकती है क्योंकि पीडीओ इस तरह से काम नहीं करता है।

यह सर्वर-डेटाबेस में अलग-अलग $ क्वेरी भेजता है और डेटाबेस द्वारा जुड़ने के बाद निष्पादित किया जाता है।

3

बाध्य मूल्यों के साथ क्वेरी (जिसमें प्लेसहोल्डर हैं) प्रिंट करना एक लगातार अभ्यास है। शैली :placeholder => value की सरणी का उपयोग करते समय आप var_dump, print_r या var_export सरणी कर सकते हैं।

यह उदाहरण के लिए Magento एसक्यूएल डीबगिंग में किया जाता है।

"अंतिम" क्वेरी एक स्ट्रिंग के रूप में मौजूद नहीं है जब तक कि पीडीओ चालक तैयार कथन का समर्थन नहीं करता है और यह उन्हें अनुकरण कर रहा है।

संक्षेप में आप तैयार बयानों के बारे में सोच सकते हैं जैसे कि वे एक संग्रहीत कार्य या संग्रहीत प्रक्रिया थे। आप इसे एक बार बनाते हैं और एकाधिक पैरामीटर के साथ इसे कई बार निष्पादित करते हैं।

3

यह उपयोग:

/** 
* Replaces any parameter placeholders in a query with the value of that 
* parameter. Useful for debugging. Assumes anonymous parameters from 
* $params are are in the same order as specified in $query 
* 
* @param string $query The sql query with parameter placeholders 
* @param array $params The array of substitution parameters 
* @return string The interpolated query 
*/ 
public static function interpolateQuery($query, $params) { 
    $keys = array(); 

    # build a regular expression for each parameter 
    foreach ($params as $key => $value) { 
     if (is_string($key)) { 
      $keys[] = '/:'.$key.'/'; 
     } else { 
      $keys[] = '/[?]/'; 
     } 
    } 

    $query = preg_replace($keys, $params, $query, 1, $count); 

    #trigger_error('replaced '.$count.' keys'); 

    return $query; 
} 

स्रोत: View and debug prepared PDO query without looking at MySQL logs

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