【问题标题】:SQL query in PHP: got nothing with printing the arrayPHP中的SQL查询:打印数组一无所获
【发布时间】:2008-11-25 02:42:24
【问题描述】:

我有一个查询,它选择表“酒店”中的所有适当记录,然后为每个酒店在表“已预订房间”中查找特定类型的预订房间以及特定时期的所有这些。 所以首先我从“hotel_table”中取出所有hotel_id,根据搜索表单提供的位置,对于每个hotel_id,我都会遍历“booked_rooms”表。

代码如下:

if(isset($_GET['book'])){
$sql=mysql_query("SELECT hotel_id FROM 'hotels' WHERE city='$city") or   die(mysql_error());
while($row=mysql_fetch_array($sql)){
   $sql_2=mysql_query("SELECT * FROM `booked_rooms` WHERE hotel_id='$hotel_id'
   AND   arrival_date BETWEEN '$arrival_date' AND '$departure_date'
   OR departure_date BETWEEN '$arrival_date' AND '$departure_date'")
or die(mysql_error()); 
}

while($row_2=mysql_fetch_array($sql_2)){
   print_r($row_2);
}

}
// $city, $arrival_date and $departure date are values retrieved from the search form

问题是我通过'hotel'表循环并获取所有适合该位置的hotel_id,但打印$row_2数组却一无所获。 我尝试在 SQL 'foreach' 循环中使用 JOINS,但也没有运气。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    不懂PHP,一个查询能搞定吗?

    SELECT booked_rooms.*, hotels.* FROM 'hotels' 
    JOIN 'booked_rooms' ON hotels.hotel_id = booked_rooms.hotel_id
    WHERE 
       hotels.city='$city" AND
       (
       booked_rooms.arrival_date BETWEEN '$arrival_date' AND '$departure_date' OR   
       booked_rooms.departure_date BETWEEN '$arrival_date' AND '$departure_date')
    

    根据需要检查表格周围的 '' 引号以获取 PHP 字符串等...

    【讨论】:

      【解决方案2】:

      请不要将构建 SQL 查询从外部不受信任的数据。这是 Bobby Tables 问题。

      有关使用参数化语句的详细信息,请参阅this one 之类的页面。

      【讨论】:

      【解决方案3】:

      首先,您的第一个 SQL 中有一个错误,因为您没有正确引用您的城市名称。然后你不会从结果集中获取hotel_id。然后你有第二个循环在错误的地方。

      尝试以下方法:

      if( isset($_GET['book']) ) {
          $sql = mysql_query("SELECT hotel_id FROM 'hotels' WHERE city='".mysql_real_escape_string($city)."'") or die(mysql_error());
      
          $arrival_date = mysql_real_escape_string($arrival_date);
          $departure_date = mysql_real_escape_string($departure_date);
          while( $row = mysql_fetch_assoc($sql) ) {
              $hotel_id = $row['hotel_id'];
              $sql_2 = mysql_query("SELECT *
                  FROM `booked_rooms`
                  WHERE hotel_id = ".$hotel_id."
                      AND (
                          arrival_date BETWEEN '".$arrival_date."' AND '".$departure_date."'
                          OR departure_date BETWEEN '".$arrival_date."' AND '".$departure_date."'
                        )")
              or die(mysql_error());
      
              while( $row_2 = mysql_fetch_assoc($sql_2) ) {
                 print_r($row_2);
              }
          }
      
      }
      
      // $city, $arrival_date and $departure date are values retrieved from the search form
      

      我还建议您在空白处更慷慨。它使 PHP 更易于阅读。

      【讨论】:

      • 您的 where 子句的第二部分不需要括号吗?否则,这些谓词的优先级不清楚...?
      • 当。你是对的。我本来想添加这些,但分心了。它已修复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2021-11-17
      • 2016-04-07
      相关资源
      最近更新 更多