2012-06-22 24 views
5

thể trùng lặp:
PDO Prepared StatementsLàm thế nào tôi có thể xem một Bản Tuyên Bố PDO SQL chuẩn bị

Tôi chắc chắn câu trả lời cho điều này là rất đơn giản, nhưng tôi dường như không thể có thể tìm thấy nó.

Tôi đang sử dụng PDO (đối tượng dữ liệu PHP) để chạy truy vấn đối với cơ sở dữ liệu MySQL và sẽ thấy hữu ích khi hiển thị truy vấn đã chuẩn bị trước khi nó được thực hiện đối với DB.

Có cách nào để thực hiện việc này không? Ví dụ:

$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

Nó được thảo luận ở đây http://stackoverflow.com/questions/2411182/how-to-debug-pdo-database-queries và http: //stackoverflow.com/questions/6961897/php-pdo-how-can-i-display-the-query-pdo-just-prepared – Bob

+0

Tôi rõ ràng đã không tìm kiếm quá tốt, với tốc độ mà cả hai bạn đã tìm thấy các bài đăng khác. – Bryan

+0

@Bryan Đây là câu hỏi đầu tiên trong bảng câu hỏi có liên quan ở phía bên tay phải! – lonesomeday

Trả lời

3

Bạn không thể nhận truy vấn được gửi đến máy chủ vì PDO không hoạt động theo cách này.

Nó sẽ gửi $ query một cách riêng biệt và $ id riêng cho cơ sở dữ liệu máy chủ được thực hiện sau khi tham gia bởi cơ sở dữ liệu.

3

Thực hành thường xuyên là in truy vấn (có phần giữ chỗ trong truy vấn) cùng với các giá trị bị ràng buộc. Khi sử dụng một mảng kiểu :placeholder => value, bạn chỉ có thể var_dump, print_r hoặc var_export mảng.

Điều này được thực hiện trong gỡ lỗi SQL Magento chẳng hạn.

Truy vấn "cuối cùng" không tồn tại dưới dạng chuỗi trừ khi trình điều khiển PDO không hỗ trợ các câu lệnh đã chuẩn bị và nó mô phỏng chúng.

Thực chất bạn có thể nghĩ về các câu lệnh đã chuẩn bị như thể chúng là một hàm được lưu trữ hoặc một thủ tục được lưu trữ. Bạn tạo nó một lần và thực thi nó nhiều lần với nhiều tham số.

3

sử dụng nó:

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

nguồn: View and debug prepared PDO query without looking at MySQL logs

Các vấn đề liên quan