【问题标题】:localhost do not load due to php code由于 php 代码,localhost 不加载
【发布时间】:2017-12-08 11:44:13
【问题描述】:

我的 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);

【问题讨论】:

  • 可能是致命错误?屏幕上什么都看不到。/浏览器的来源?错误报告是否开启? &lt;?php error_reporting(E_ALL); ini_set('display_errrors', 1); ?&gt;

标签: php sql xampp localhost


【解决方案1】:

在开始之前,我想向您推荐一些事情:避免使用while 语句。除非真的需要它们——就像它们在 PHP 文档中使用的确切方式一样(即使那样你也可以找到替代品)——应该一直避免使用它们。我在下面介绍动机。

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

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

方法一:

注意区别:$notification 仅在循环步骤期间有效。每次迭代后,$notification 被新创建。并且,当 mysqli_fetch_assoc() 在 (last + 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);
}

?>

方法二:

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

<?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库):

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多