页面代码在UNION sql查询后停止执行
问题描述:
我仍然是编写PHP代码的初学者。 从几个小时我试图编写一个脚本,它从两个数据库表中获取结果并显示结果(在do while while循环中)+分页。 我无法修复的问题是,如果没有结果 - 脚本停止页面执行,它看起来减半。页面代码在UNION sql查询后停止执行
这是查询:
$query = "SELECT phId FROM photographers WHERE phCity=$row_cities[cityId] UNION SELECT pservOwner FROM phServices WHERE pservOwner = $row_prePhotographer[phId] AND pservService=$row_service[serviceId] LIMIT $redove, $broinastranica";
$query_params = array();
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex) {
die(fusllPageError("Error","System error 103."));
}
$row_photographers = $stmt->fetch();
if(!empty($row_photographers['phId'])) {
do { ... } while($row_photographers = $stmt->fetch());
else {
echo "<h1>There are no results</h1>
<p class=\"text-center\">Please check again after few days.</p>";
}
能否请您给它一看,告诉我做什么了? 预先感谢您。
答
检查第一个select中的phId,第二个select语句中的pservOwner具有相同的数据类型。
尝试为每个select语句使用括号。像 (从表1中选择id1) 联合 (从表2中选择id2)
+0
嗨,我已经试图把(...)两个选择,不幸的是没有帮助。 phId和pservOwner都是具有相同长度的INT字段,所以它必须很好。 –
答
看来解决方案非常简单。在每个WHERE语句的值周围使用单引号做了这个诀窍。
下面是该查询现在的样子:
$query = "SELECT phId FROM photographers WHERE phCity='$row_cities[cityId]' UNION ALL SELECT pservOwner FROM phServices WHERE pservOwner = '$row_prePhotographer[phId]' AND pservService='$row_service[serviceId]' LIMIT $redove, $broinastranica";
谢谢你们的协助。
你的桌子里是否有空行?就个人而言,我会检查使用PDOStatement :: rowCount()而不是使用mpty($ row_photographers ['phId'])的结果 – dgig
我认为'Limit'必须是查询中的最后一个语句 –
是的,LIMIT子句在查询的最后。 $ broinastranica和$ redove是传递数字(这决定了分页 - 页面和每页显示多少项目)。 –