我花了整晚的時間研究並試圖找出我的搜索查詢出了什麼問題。我使用聯合查詢和分頁進行一些通配符搜索。PDO - SQLSTATE [HY093]:帶有UNION查詢的參數號無效
$current_page = 0;
$search1 = $search;
$search2 = $search."%";
$search3 = "%".$search."%";
$pdo = DB::connection()->getPdo();
$stmt = $pdo->prepare('
SELECT id, desc FROM table WHERE desc LIKE :search1 LIMIT :skip, 15
UNION
SELECT id, desc FROM table WHERE desc LIKE :search2 LIMIT :skip, 15
UNION
SELECT id, desc FROM table WHERE desc LIKE :search3 LIMIT :skip, 15
');
$stmt->bindParam(':search1', $search1);
$stmt->bindParam(':search2', $search2);
$stmt->bindParam(':search3', $search3);
$stmt->bindParam(':skip', $current_page, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
第一個查詢(沒有聯合)工作正常,或者如果我刪除:skip參數,它也可以正常工作。
任何想法有什麼不對?
'desc'是保留字(如'table'但我懷疑這就是你用什麼作爲表名,對嗎?*眨眼*)。它需要用反引號包裹。 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html --- **等待答案**堆在此評論後...(*我討厭如果我這樣做的話,就會陷入潛在的蠕蟲病毒庫中。*) –
爲什麼要使用佔位符的偏移量,這是默認值。 – Mihai
你不能只是做'desc LIKE:search1 OR desc LIKE:search2 OR desc LIKE:search3'? – Class