2012-06-22 7 views
5

Mögliche Duplizieren:
PDO Prepared StatementsWie kann ich eine vorbereitete PDO SQL-Anweisung

Ich bin sicher, dass die Antwort auf diese sehr einfach, aber ich scheine nicht zu sein fähig, es zu finden.

Ich verwende PDO (PHP Data Objects), um eine Abfrage gegen eine MySQL-Datenbank auszuführen, und würde es nützlich finden, die vorbereitete Abfrage anzuzeigen, bevor es gegen die DB ausgeführt wird.

Gibt es eine Möglichkeit, dies zu tun? Beispiel:

$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

Diskutiert wird hier http://stackoverflow.com/questions/2411182/how-to-debug-pdo-database-queries und http: //stackoverflow.com/questions/6961897/php-pdo-how-can-i-display-the-query-pdo-just-prepared – Bob

+0

Ich habe offensichtlich nicht so gut gesucht, angesichts der Geschwindigkeit, mit der Sie beide gefunden haben andere Beiträge. – Bryan

+0

@Bryan Es war der erste in der verwandten Fragen-Panel auf der rechten Seite! – lonesomeday

Antwort

3

Sie können die Abfrage, die an den Server gesendet wird, nicht abrufen, da PDO auf diese Weise nicht funktioniert.

Er sendet die $ query separat und $ id separat an die Server-Datenbank, die nach dem Beitritt von der Datenbank ausgeführt werden.

3

Häufig wird die Abfrage (die Platzhalter enthält) neben den gebundenen Werten gedruckt. Wenn Sie ein Array des Typs :placeholder => value verwenden, können Sie einfach das Array var_dump, print_r oder var_export.

Dies geschieht zum Beispiel in Magento SQL Debugging.

Die "finale" Abfrage existiert nicht als String, es sei denn, der PDO-Treiber unterstützt vorbereitete Anweisungen nicht und simuliert sie.

Im Wesentlichen können Sie sich vorbereitete Anweisungen vorstellen, als wären sie eine gespeicherte Funktion oder eine gespeicherte Prozedur. Sie erstellen es einmal und führen es mehrmals mit mehreren Parametern aus.

3

Verwendung es:

/** 
* 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; 
} 

Quelle: View and debug prepared PDO query without looking at MySQL logs

Verwandte Themen