我遇到过这个我以前没看过的警告:
Warning: PDOStatement::execute() [pdostatement.execute]: sqlSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in…
$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',PDO::PARAM_INT); $stmt->bindParam(':limit',$limit,PDO::PARAM_INT); $stmt->execute(); $searcharray = $stmt->fetchAll(PDO::FETCH_ASSOC); return $searcharray; }
函数和PDO查询工作正常,没有查询中包含的偏移量和限制变量.那么可能导致这个警告呢?
谢谢
更改
LIMIT :offset,:limit
至
LIMIT ?,?
和
$stmt->bindParam(':offset',PDO::PARAM_INT); $stmt->bindParam(':limit',PDO::PARAM_INT);
至:
$stmt->bindValue($index+1,PDO::PARAM_INT); $stmt->bindValue($index+2,PDO::PARAM_INT);