【问题标题】:Trying to access array offset on value of type null (PHP)尝试访问 null 类型值的数组偏移量(PHP)
【发布时间】:2021-01-21 09:14:50
【问题描述】:

问题已解决(在 cmets 中) 我正在为学校做一个项目,我收到此错误尝试访问这行代码中 null 类型值的数组偏移量

<div class="user-name"><?php echo $guests["firstName"] ?></div>

它在这段代码中,我从数据库中检索信息

foreach((array)$result as $guests)
        {
    ?>
    <div class="posts-container">
        <div class="post-header">
            <div class="user-details">
                <div class="user-name"><?php echo $guests["firstName"] ?></div>
                <div class="user-email"></div>
            </div>
            <div class="time"></div>
        </div>
        <div class="post-message">
            <h3></h3>
            <p></p>
        </div>
    </div>
    <?php } ?>

人们询问了 $result 的 sql 代码和类型/结构 类型/结构: object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(9) ["lengths"]=> NULL ["num_rows"]=> int(5 ) [“类型”]=> int(0) sql/数据库:

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "guestbook";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, firstName, lastName, email, title, message, URL, showEmail, Date FROM guestbook";
$result = $conn->query($sql);

$conn->close();

【问题讨论】:

标签: php


【解决方案1】:

您正试图以数组的形式访问空值。

在您的情况下,$guest 值为空。所以,访问$guest['something'] 会抛出一个“注意:试图访问空值类型的数组偏移”

两个建议:

  1. 检查$guest值(快速):

    foreach((array)$result as $guests)
    {
        if (!is_array($guests)) {
            continue;
        }
    
  2. 检查$result值(更好):

    如果$result 是SQL 查询的结果,可能会尝试添加条件以避免NULL 结果。 或者,在删除空值之前使用array_filter()

【讨论】:

  • 第一个选项有效,但我的 foreach 没有给出结果,第二个选项我得到一个错误 array_filter() 期望参数 1 是数组,对象在
【解决方案2】:

那是因为这条线

$result = $conn->query($sql);

这不是你想要的,你需要这样获取结果

if ($result->num_rows > 0)
while($guest = $result->fetch_assoc()) {
{?>
    <div class="posts-container">
        <div class="post-header">
            <div class="user-details">
                <div class="user-name"><?php echo $guest["firstName"] ?></div>
                <div class="user-email"></div>
            </div>
            <div class="time"></div>
        </div>
        <div class="post-message">
            <h3></h3>
            <p></p>
        </div>
    </div>
<?php } ?>

【讨论】:

  • 最后一个错误消失了,但我现在有一个新错误 Illegal string offset 'firstName'
  • 它修复了错误,但我没有从数据库中得到任何东西,但它适用于其他解决方案,但谢谢
  • 不客气,如果我的回答对您的问题有所帮助,如果您支持我的回答并选择它作为您希望的最佳答案,我将不胜感激。
【解决方案3】:

你可以试试这样的

<?php
//Array to be shown
$guests = [
        ['firstName' => 'Alex', 'email' => 'user@user.ru'] ,
        ['firstName' => 'Jhon', 'email' => 'user@user.ru']
];
?>
<div class="posts-container">
    <div class="post-header">
        <div class="user-details">
        <!-- foreach alternate syntax -->
        <?foreach ($guests as $guest):?>
            <div class="user-name"><?=$guest['firstName']?></div>
            <div class="user-email"><?=$guest['email']?></div>
        <!-- foreach alternate syntax -->
        <?endforeach;?>
    </div>
    <div class="time"></div>
</div>
<div class="post-message">
    <h3></h3>
    <p></p>
</div>

【讨论】:

  • 请分享更多细节,以便其他人学习
猜你喜欢
  • 2022-10-16
  • 2021-07-23
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 2020-11-16
相关资源
最近更新 更多