2009-12-10 30 views
5

Tôi đã tìm kiếm câu trả lời cho điều này nhưng không tìm thấy nó ở bất cứ đâu. Những cuộc gọi đến PDO :: chuẩn bị() được lưu trữ, hay tôi nên bộ nhớ cache kết quả bản thân mình, tức là nếu tôi làm như sauPHP PDO Caching

function foo() { 
    $handle = PDO::prepare(...); 
    /* do stuff with the handle */ 
} 

sẽ là chuẩn bị() tuyên bố được lưu trữ bởi PDO để nó nhanh chóng lấy ra thứ hai, thứ ba, vv lần? Hoặc tốt hơn là tự làm điều đó, ví dụ:

function foo() { 
    static $handle = null; 
    if (!$handle) { 
    $handle = PDO::prepare(...); 
    } 
    /* do stuff with the handle */ 
} 

Trả lời

4

MySQL query cache. Nhưng nói chung, bạn chắc chắn nên giữ mã định danh cho câu lệnh đã chuẩn bị và sử dụng lại nó.

4

Hai cuộc gọi tiếp theo tới PDO::prepare() (ngay cả với cùng một truy vấn SQL) sẽ trả lại hai khác nhau PDOStatement (hoặc xử lý) để tránh va chạm, đặc biệt là giữa các ràng buộc trước đó và hiện tại bạn có thể áp dụng cho nó. Chi phí của việc tạo ra một PDOStatement với prepare() là thấp anyway. Những gì bạn có thể muốn lưu trữ là kết quả trả về từ cùng một truy vấn SQL, hoặc là thô hoặc được xây dựng bởi chuẩn bị() và đây là một tính năng của DBMS của bạn (ví dụ MySQL), không phải PHP.

1

Tùy thuộc vào trình điều khiển cơ sở dữ liệu của bạn. Với MySQL, PDO sẽ tạo một câu lệnh được chuẩn bị sẵn theo mặc định. Bạn có thể vô hiệu hóa nó, nếu bạn muốn sử dụng một bộ nhớ cache truy vấn thực tế.

Nếu bạn hoàn toàn phải thực hiện cùng một truy vấn nhiều lần, thì có, bạn sẽ muốn giữ điều đó xung quanh. Nếu bạn đang sử dụng các câu lệnh đã được mô phỏng, thì nó không tạo ra sự khác biệt nào cả.