2012-08-27 33 views
22

Tôi đã có một vòng lặp như thế:PHP PDO bindParam đã rơi vào một foreach

foreach($Fields as $Name => $Value){ 
    $Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR); 
} 

Không có gì phức tạp. Tuy nhiên, mỗi giá trị được đặt thành giá trị cuối cùng trong mảng ($Fields).

Tôi làm cách nào để khắc phục điều đó?

Trả lời

39

Tuy nhiên, nhờ vào điều này guys. Tôi phát hiện ra rằng bạn cần phải vượt qua giá trị bằng cách tham chiếu với số & trước đó như sau:

foreach($Fields as $Name => &$Value){ 
    $Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR); 
} 

Điều này khiến tôi phát điên.

quote thực tế từ PHP.net:

Vili 28-May-2010 12:01

này hoạt động ($ val bằng cách tham khảo):

<?php 
foreach ($params as $key => &$val){ 
    $sth->bindParam($key, $val); 
} 
?> 

chí này không thành công ($ val theo giá trị, bởi vì bindParam cần & $ biến):

<?php 
foreach ($params as $key => $val) { 
    $sth->bindParam($key, $val); 
} 
?> 
+5

Đã lưu cuộc sống của tôi. Cảm ơn bạn đã tìm thấy điều này. –

+0

@XyanEwing Bạn được chào đón! –

+2

Hầu như đóng sầm bàn phím của tôi vào màn hình của tôi, thx để lưu nó! :) –

6

Nếu bạn không cần có khả năng để giữ cho các biến đồng bộ với các tham số ràng buộc trước khi truy vấn được thực hiện (đó là trường hợp 99,9% thời gian, theo kinh nghiệm của tôi), nó có thể là tốt hơn chỉ cần sử dụng PDOStatement::bindValue() thay vì PDOStatement::bindParam():

foreach ($Fields as $Name => $Value) { 
    $Query->bindValue(':' . $Name, $Value, PDO::PARAM_STR); 
} 
+0

Cảm ơn bạn đã biết thông tin, nhưng tôi biết điều này. Đó là lý do tại sao tôi đã sử dụng bindParam, có một số thay đổi xảy ra sau này trên kịch bản lệnh. Và tôi đang sử dụng bindValue quá thường xuyên để biết rằng bindParam yêu cầu một &. –

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