由于PHP代码,localhost不加载

时间:2017-07-05 00:27:08

标签: php sql xampp localhost

我的xampp localhost运行良好,直到我将此代码添加到我的php文件

<?php while ($notification) {?>
<li>
<?php 
  echo $notification['notification'];
  ?>
  </li>
  <?php
} ?>

现在页面未加载或部分加载

这里$ notification是

$notification_sql= "SELECT id FROM notifications WHERE user_id='{$_SESSION['user']}'";

       $notification_query = mysqli_query($conn, $notification_sql);
      $notification = mysqli_fetch_assoc($notification_query);

1 个答案:

答案 0 :(得分:0)

在开始之前,我想向您推荐一些内容:避免使用while语句。除非确实需要它们 - 就像它们在PHP文档中使用的确切方式一样(即使这样你也可以找到替代方案) - 应该始终避免使用它们。我提出了动机。

那就是说,......不是$notification['notification'],而是$notification['id']

更改后,您仍然遇到问题: 无限循环 。因为您使用while循环而不更改循环条件的状态。例如,您正在验证$notification数组是否存在。因为它一直存在 - 它的状态永远不会在循环中发生变化 - 然后迭代的数量将是无限的。为了避免这种危险(!!!)情况,您可以使用以下代码。

方法1:

注意区别:$notification仅对循环步骤有效。每次迭代后,新创建$notification。并且,当mysqli_fetch_assoc()在(最后+1) - 步骤中返回FALSE时,$notification会收到该值,因此循环结束。

<?php
$notification_sql = "SELECT id FROM notifications WHERE user_id='{$_SESSION['user']}'";

$notification_query = mysqli_query($conn, $notification_sql);

if ($notification_query) {
    while ($notification = mysqli_fetch_assoc($notification_query)) {
        ?>
        <li>
            <?php
            echo $notification['id'];
            ?>
        </li>
        <?php
    }

    mysqli_free_result($notification_query);
}

&GT;

方法2:

或者,如果您想在数组中获取结果并稍后输出其项目,那么您可以这样做:

<?php
$notification_sql = "SELECT id FROM notifications WHERE user_id='{$_SESSION['user']}'";

$notification_query = mysqli_query($conn, $notification_sql);

$notifications = array();

if ($notification_query) {
    while ($row = mysqli_fetch_assoc($notification_query)) {
        $notifications[] = $row['id'];
    }

    mysqli_free_result($notification_query);
}

// OTHER STUFF AFTER FETCHING...
?>

<?php
// LOOPING AT A LATER TIME.
foreach ($notifications as $notificationId) {
    ?>
    <li>
        <?php
        echo $notificationId;
        ?>
    </li>
    <?php
}
?>

其他建议:

  • 使用prepared statements以避免MySQL注入。
  • 使用exception handling来捕获所有错误并相应地处理它们。特别是在运行数据库操作时。
  • 使用PDO代替mysqli

这里我提供了预处理语句的完整代码示例以及异常处理(使用mysqli库):

祝你好运。