我是使用PDO创建数据库请求的新手,需要一些帮助。 我有以下数据库调用:
$stmt1 = $pdo->prepare('
SELECT * FROM news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC
UNION
SELECT * FROM vs_news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC
');
$stmt1->bindParam(1, $col_start);
$stmt1->bindParam(2, $col_end);
$stmt1->execute();
我已经阅读了足够的内容,认为UNION与PDO兼容,但我似乎无法正确获取代码,也找不到完整代码格式的示例。
两个表中的字段是相同的,db调用仅适用于一个或另一个表,但不适用于我显示的UNIION。
有人可以指出我的问题在哪里吗?
由于
答案 0 :(得分:4)
使用?意味着你需要为每个参数匹配一个参数?
使用这种方法:
$stmt1 = $pdo->prepare('
SELECT * FROM news WHERE pub_date >= :date1 AND pub_date < :date2 AND display = 1 ORDER BY pub_date DESC
UNION
SELECT * FROM vs_news WHERE pub_date >= :date1 AND pub_date < :date2 AND display = 1 ORDER BY pub_date DESC
');
$stmt1->bindParam(':date1', $col_start);
$stmt1->bindParam(':date2', $col_end);
$stmt1->execute();
也;使用union,请确保在两个查询中使用相同的列数。
答案 1 :(得分:3)
要在ORDER BY
内使用UNION
,您应该将这些组件包含在()
中。除了按照评论中的建议绑定所有四个参数,或使用其他地方建议的命名占位符之外,还要执行此操作:
$stmt1 = $pdo->prepare('
(SELECT * FROM news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC)
UNION
(SELECT * FROM vs_news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC)
');
中对此进行了描述