2016-02-05 101 views
0

我仍然是编写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>"; 
} 

能否请您给它一看,告诉我做什么了? 预先感谢您。

+0

你的桌子里是否有空行?就个人而言,我会检查使用PDOStatement :: rowCount()而不是使用mpty($ row_photographers ['phId'])的结果 – dgig

+0

我认为'Limit'必须是查询中的最后一个语句 –

+0

是的,LIMIT子句在查询的最后。 $ broinastranica和$ redove是传递数字(这决定了分页 - 页面和每页显示多少项目)。 –

回答

0

检查第一个select中的phId,第二个select语句中的pservOwner具有相同的数据类型。

尝试为每个select语句使用括号。像 (从表1中选择id1) 联合 (从表2中选择id2)

+0

嗨,我已经试图把(...)两个选择,不幸的是没有帮助。 phId和pservOwner都是具有相同长度的INT字段,所以它必须很好。 –

-1

看来解决方案非常简单。在每个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"; 

谢谢你们的协助。