2012-06-22 16 views
5

Powiel możliwe:
PDO Prepared StatementsJak mogę obejrzeć przygotowane oświadczenie PDO SQL

Jestem pewien, że odpowiedź na to pytanie jest bardzo prosta, ale nie wydają się być w stanie go znaleźć.

Używam PDO (PHP Data Objects) do uruchamiania kwerendy z bazą danych MySQL i byłoby użyteczne wyświetlenie przygotowanego zapytania przed jego wykonaniem względem bazy danych.

Czy jest jakiś sposób na zrobienie tego? Na przykład:

$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

Jest tu mowa http://stackoverflow.com/questions/2411182/how-to-debug-pdo-database-queries i http: //stackoverflow.com/questions/6961897/php-pdo-how-can-i-display-the-query-pdo-just-prepared – Bob

+0

Oczywiście nie wyszukałem zbyt dobrze, biorąc pod uwagę szybkość, z jaką obaj znaleźliście inne posty. – Bryan

+0

@ Bryan To był pierwszy w panelu z pytaniami po prawej stronie! – lonesomeday

Odpowiedz

3

Nie można uzyskać zapytania wysłanego na serwer, ponieważ funkcja PDO nie działa w ten sposób.

Wysyła zapytanie $ osobno i $ id osobno do bazy danych serwera, które są wykonywane po połączeniu bazy danych.

3

Częstą praktyką jest drukowanie zapytania (które zawiera symbole zastępcze) obok powiązanych wartości. Używając tablicy w stylu :placeholder => value można po prostu var_dump, print_r lub var_export tablicę.

Odbywa się to na przykład w debugowaniu Magento SQL.

Zapytanie "ostateczne" nie istnieje jako ciąg znaków, chyba że sterownik PDO nie obsługuje przygotowanych instrukcji i symuluje je.

Zasadniczo można myśleć o przygotowanych wyciągach tak, jakby były funkcją zapisaną lub procedurą przechowywaną. Utworzysz go raz i wykonasz go wiele razy z wieloma parametrami.

3

wykorzystanie go:

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

źródło: View and debug prepared PDO query without looking at MySQL logs

Powiązane problemy