Tôi đã sử dụng PDO và chuẩn bị tất cả các tuyên bố của tôi chủ yếu vì lý do bảo mật. Tuy nhiên, tôi có một phần mã của tôi rằng không thực thi cùng một câu lệnh nhiều lần với các tham số khác nhau và tôi nghĩ đây sẽ là nơi các câu lệnh được chuẩn bị thực sự tỏa sáng. Nhưng họ thực sự phá vỡ mã ...Đệ quy trong các báo cáo đã chuẩn bị
Logic cơ bản của mã này.
function someFunction($something) {
global $pdo;
$array = array();
static $handle = null;
if (!$handle) {
$handle = $pdo->prepare("A STATEMENT WITH :a_param");
}
$handle->bindValue(":a_param", $something);
if ($handle->execute()) {
while ($row = $handle->fetch()) {
$array[] = someFunction($row['blah']);
}
}
return $array;
}
Có vẻ ổn với tôi, nhưng nó thiếu nhiều hàng. Cuối cùng tôi nhận ra rằng lệnh xử lý đã được thay đổi (được thực hiện với param khác nhau), có nghĩa là lệnh gọi trong vòng lặp while sẽ chỉ làm việc một lần, sau đó hàm sẽ tự động gọi lại và tập kết quả được thay đổi.
Vì vậy, tôi tự hỏi cách tốt nhất để sử dụng các câu lệnh chuẩn bị PDO theo cách đệ quy.
Một cách có thể là sử dụng fetchAll(), nhưng nó nói trong hướng dẫn có chi phí đáng kể. Toàn bộ vấn đề này là làm cho nó hiệu quả hơn.
Điều khác mà tôi có thể làm là không sử dụng lại tay cầm tĩnh và thay vào đó hãy tạo một cái mới mỗi lần. Tôi tin rằng kể từ khi chuỗi truy vấn là như nhau, trong nội bộ trình điều khiển MySQL sẽ được sử dụng một tuyên bố chuẩn bị anyway, do đó, chỉ là chi phí nhỏ của việc tạo ra một xử lý mới trên mỗi cuộc gọi đệ quy. Cá nhân tôi nghĩ rằng đánh bại quan điểm.
Hoặc có cách nào để viết lại điều này không?
tôi chỉ làm một số (không phải siêu khoa học) thử nghiệm mã chức năng đệ quy rất giống nhau của tôi và có conc luded rằng cho các mục đích của tôi, báo cáo chuẩn bị chậm hơn tổng thể. Điểm chuẩn bị tuyên bố là gì nếu bạn phải chuẩn bị lại trước mỗi lần sử dụng? Chắc chắn là tôi đang thiếu gì đó. –