Tôi đã đi qua cảnh báo này tôi đã không nhìn thấy trước đây:PDO: số tham số không hợp lệ: trộn được đặt tên và vị trí các thông số
Cảnh báo: PDOStatement :: thực hiện() [pdostatement.execute]: SQLSTATE [HY093 ]: số tham số không hợp lệ: trộn tên và các thông số vị trí trong ...
Đề cập đến các truy vấn PDO sau (đã đơn giản hóa các chức năng cho dễ đọc):
$offset = 0;
$limit = 12;
function retrieve_search_posts($searchfield, $offset, $limit){
$where = array();
$words = preg_split('/[\s]+/',$searchfield);
array_unshift($words, '');
unset($words[0]);
$where_string = implode(" OR ", array_fill(0,count($words), "`post_title` LIKE ?"));
$query = "
SELECT p.post_id, post_year, post_desc, post_title, post_date, img_file_name, p.cat_id
FROM mjbox_posts p
JOIN mjbox_images i
ON i.post_id = p.post_id
AND i.cat_id = p.cat_id
AND i.img_is_thumb = 1
AND post_active = 1
WHERE $where_string
ORDER BY post_date
LIMIT :offset, :limit
DESC";
$stmt = $dbh->prepare($query);
foreach($words AS $index => $word){
$stmt->bindValue($index, "%".$word."%", PDO::PARAM_STR);
}
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();
$searcharray = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $searcharray;
}
Truy vấn chức năng và PDO hoạt động tốt mà không có các biến bù trừ và giới hạn được bao gồm trong truy vấn. Vậy điều gì có thể gây ra cảnh báo này?
Cảm ơn
Nó sẽ không thể thực tế là bạn đang trộn tên thông số (': offset',': limit') với các thông số vị trí (' LIKE? ') Là trạng thái cảnh báo? – Wiseguy
@Wiseguy cảm ơn, tôi biết những gì họ gọi là bây giờ quá: p – crm
@ MarcB Có lẽ tôi đang thiếu một cái gì đó, nhưng nơi nào bạn nhìn thấy một lỗ phun sql? – jeroen