Khi một yêu cầu được phục vụ, php sẽ "dọn dẹp" cá thể và giải phóng tài nguyên và các biến khác. Điều này được thực hiện trong một số bước. Vì fastcgi giữ cho tiến trình tồn tại sau một yêu cầu nên không phải tất cả các bước đều được thực thi và không phải tất cả bộ nhớ đều được giải phóng. Có vd. EG (dai dẳng_list) được sử dụng bởi mysql_pconnect ()
, pg_pconnect ()
, ... Danh sách này không bị trống giữa các yêu cầu miễn là tiến trình vẫn tồn tại (có thể, tùy thuộc vào việc triển khai thực tế, nhưng điều đó sẽ bất chấp mục đích của EG (danh sách bền bỉ)). Nếu bạn sử dụng kết nối liên tục, tập lệnh của bạn có thể nhận được kết nối "được sử dụng lại" được thiết lập trong lần yêu cầu trước đó.
Để (lại) sử dụng trực tiếp một câu lệnh đã chuẩn bị, bạn cần mã định danh cho câu lệnh đó (và kết nối đó). Khi sử dụng (php-) postgresql, đây chỉ là một chuỗi duy nhất (kết nối khôn ngoan) mà bạn chuyển đến pg_execute () , do đó, tập lệnh của bạn không có vấn đề gì để giành quyền truy cập vào câu lệnh được chuẩn bị trước bởi một phiên bản khác (sử dụng cùng một kết nối).
Sử dụng mysqli
hoặc PDO-mysql
bạn cần một tài nguyên / đối tượng làm định danh câu lệnh. Đó là một vấn đề vì cả phần mở rộng mysqli và pdo dường như không cung cấp cách lưu trữ tài nguyên trong EG (Pers_list) giữa các yêu cầu và bạn cũng không thể tạo lại nó. Trừ khi php-fpm cung cấp một "dịch vụ" như vậy, có vẻ như không thể sử dụng lại trực tiếp câu lệnh đã chuẩn bị sẵn của mysql.
Tất cả những gì bạn có thể hy vọng là bộ đệm truy vấnserver-side
. Trong các phiên bản gần đây (xem liên kết), nó có thể nhận ra câu lệnh khi sử dụng câu lệnh đã chuẩn bị. Nhưng ngay cả sau đó nó cũng không sử dụng lại câu lệnh đã chuẩn bị thực tế:
Vì vậy, nếu tôi không nhầm, hiện tại bạn không thể sử dụng lại câu lệnh mysql đã chuẩn bị trong một yêu cầu trước đó trong php.