【发布时间】:2014-02-10 09:34:38
【问题描述】:
我整个晚上都在研究并试图找出我的搜索查询出了什么问题。我使用联合查询和分页进行一些通配符搜索。
$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也是保留字,但我怀疑这就是您使用的表名,对吧?wink)。它需要用反引号包裹。 dev.mysql.com/doc/refman/5.5/en/reserved-words.html --- 等待答案在此评论之后堆积...(如果我这样做,我不想陷入潜在的蠕虫罐中。 ) -
为什么要使用带占位符的偏移量,无论如何这是默认设置。
-
你不能只做
desc LIKE :search1 OR desc LIKE :search2 OR desc LIKE :search3吗? -
我使用联合是因为我需要按特定顺序排列的结果(首先是完全匹配,等等,从通配符中可以看出)。表名和列名只是为了简化示例:) :skip 参数 ($current_page) 随分页而变化。