2013-01-12 33 views
6

Tôi có đoạn code sau forexample:Thay đổi PDO :: ATTR_EMULATE_PREPARES lỗi FALSE và nhận được "số tham số không hợp lệ"

$dbStatement=$this->dbObject->prepare("SELECT AVG(quality) as quality, 
               AVG(adequacy) as adequacy, 
               AVG(friendliness) as friendliness, 
               SUM(overall) as overall, 
               SUM(completed) as completed, 
               type 
             FROM (SELECT AVG(quality) as quality, 
                 AVG(adequacy) as adequacy, 
                 AVG(friendliness) as friendliness, 
                 COUNT(id) as overall, 
                 SUM(is_completed) as completed, 
                 category_id, type 
               FROM valuation a 
               WHERE status  =1 
               AND type   =:01 
               AND ((type='employer' AND owner_id=:02) 
                 OR (type='employee' AND winner_id=:02)) 
               GROUP BY category_id 
               HAVING COUNT(id)<=:03) b 
             GROUP BY type"); 
$dbStatement->bindParam(':01',$Type); 
$dbStatement->bindParam(':02',$UserID); 
$dbStatement->bindParam(':03',$Most); 
$dbStatement->execute(); 

Mã này ném một ngoại lệ từ execute() khi tôi đặt PDO::ATTR_EMULATE_PREPARES-FALSE. Được thông báo sau được bao gồm trong các đối tượng ngoại lệ:

SQLSTATE [HY093]: tham số không hợp lệ số

Không thể nhận ra vấn đề cho đến nay, mặc dù đọc hướng dẫn sử dụng tương ứng.

Trả lời

9

Lỗi là do lặp lại của trình giữ chỗ. Mỗi trình giữ chỗ phải là duy nhất, ngay cả khi bạn đang ràng buộc cùng một thông số với nó.

AND ((type='employer' AND owner_id=:02) 
OR (type='employee' AND winner_id=:02)) 

nên là:

AND ((type='employer' AND owner_id=:02) 
OR (type='employee' AND winner_id=:another02)) 

Và sau đó liên kết với nó:

$dbStatement->bindParam(':01',$Type); 
$dbStatement->bindParam(':02',$UserID); 
$dbStatement->bindParam(':another02',$UserID); 
$dbStatement->bindParam(':03',$Most); 
+1

đầu đập vào gạch tường/giải quyết ... cảm ơn bạn. –

+0

Sigh ... đôi khi php là câm ngoài niềm tin ... dù sao cảm ơn bạn đã trả lời của bạn. Bạn nói đúng! – StefanNch

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