【问题标题】:Why is the result of my query only outputting one row?为什么我的查询结果只输出一行?
【发布时间】:2015-05-05 22:55:44
【问题描述】:

我正在从我的数据库中禁用 jQuery UI 日期选择器中的日期,而我的代码几乎可以正常工作,唯一的问题是它只从数据库中读取一行。目前我在数据库中有两个预订,因此日期选择器中应该有两个单独的预订,其中日期被禁用但只有一个。有人能看出我哪里出错了吗?

     <?php
    $bookeddates = "SELECT fromdate, todate FROM messages WHERE listing_id = '".$_GET['listingid']."'";
        $resultbookeddates = mysql_query($bookeddates) or die(mysql_error() . "<br>" . $bookeddates);
        $date_list = array();
        while ($rowbookeddates = mysql_fetch_assoc($resultbookeddates)) {


            $from = date('Y-n-j', strtotime($rowbookeddates['fromdate']));
            $to = date('Y-n-j', strtotime($rowbookeddates['todate']));

            $start_time = strtotime($from);
            $end_time = strtotime($to);
            $date_list[] = $from;

            $current_time = $start_time;

            while($current_time < $end_time) {
                //Add one day
                $current_time += 86400;
                $date_list[] = date('Y-n-j',$current_time);
            }

            $date_list[] = $to;   

       } ?>

<script type="text/javascript">
    var bookedDays = <?php echo json_encode($date_list); ?>;
</script>  

已解决,问题实际上是存储在 JavaScript 变量中的内容。上面的代码反映了工作代码。

【问题讨论】:

  • 你怎么知道只提取了一行?您一一获取所有行,并不断覆盖 $from 和 $to。获取所有行后,您只需在其余代码中使用最后的 $from 和 $to。
  • 您是否能够验证仅运行 SQL 查询会返回两行?你可以试试吗?或者尝试在您的 while 循环中输出每个 $rowbookeddatesmysql_fetch_assoc 也已被弃用。你运行的是什么版本的 PHP?
  • @kainaw - 我可以告诉我在数据库中我有两行具有不同的日期,并且只有一行日期被禁用。如何在其余代码中仅使用最后一个 $from 和 $to 来解决?
  • 您正在使用这个listing_id = '".$_GET['listingid']."'" 等待多少条记录?
  • 在你的帖子中更新你的代码,并显示你到目前为止的结果

标签: php jquery mysql jquery-ui


【解决方案1】:

我不确定您的 while 循环括号应该放在哪里,但您需要将它们向下移动。

类似这样的:

<?php
    $bookeddates = "SELECT fromdate, todate FROM messages WHERE listing_id = '".$_GET['listingid']."'";
        $resultbookeddates = mysql_query($bookeddates) or die(mysql_error() . "<br>" . $bookeddates);
        while ($rowbookeddates = mysql_fetch_assoc($resultbookeddates)) {
            $from = date('Y-n-j', strtotime($rowbookeddates['fromdate']));
            $to = date('Y-n-j', strtotime($rowbookeddates['todate']));

            $start_time = strtotime($from);
            $end_time = strtotime($to);
            $date_list = array($from);

            $current_time = $start_time;

            while($current_time < $end_time) {
                //Add one day
                $current_time += 86400;
                $date_list[] = date('Y-n-j',$current_time);
            }

            $date_list[] = $to;

    }

    $date_list_res = '["' . implode('","', $date_list) . '"]';
?>
<script type="text/javascript">
    var bookedDays = <?php echo $date_list_res; ?>;
</script>

【讨论】:

  • 赞成,只是因为这是发布问题的确切答案,即使使用具有未知数量的无序和未排序元素(日期)的数组对我来说看起来非常奇怪和无用:-)
  • @gibberish - 谢谢你,我刚刚尝试过,但我仍然只得到一行输出
【解决方案2】:

这段代码:

while ($rowbookeddates = mysql_fetch_assoc($resultbookeddates)) 
{
  $from = date('Y-n-j', strtotime($rowbookeddates['fromdate']));
  $to = date('Y-n-j', strtotime($rowbookeddates['todate']));
}

遍历结果集,将其值分配给 $from 和 $to,替换之前的值。循环结束后,您将获得遍历的 last 记录的“from”和“to”值。

您应该将结果放在一个数组中以供进一步处理,或者将处理代码包含在while 循环中。

【讨论】:

  • 是的,这就是我想说的——+1
  • @MarianoD'Ascanio - 谢谢,我尝试在 while 循环中包含处理代码,但这似乎不起作用:/ 我将如何将结果放入数组中?
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2015-05-04
  • 2016-10-21
  • 1970-01-01
  • 2023-04-03
  • 2011-07-24
相关资源
最近更新 更多