迁移到新的 php,现在得到,警告:尝试在博客编辑器中访问 bool 类型值的数组偏移量

问题描述 投票:0回答:1

我最近为我的网站迁移了主机,该网站附带了较新版本的 php。自从迁移以来,我一直收到错误

Warning: Trying to access array offset on value of type bool in /xxx/edit-post.php on line 150
,该错误与出现在博客文章类别选择字段的每个复选框之间的
if($row3['catID'] == $row2['catID']){
相关。它似乎不会妨碍为博客文章选择类别的功能。

    <legend>Categories</legend>

    <?php

    $stmt2 = $db->query('SELECT catID, catTitle FROM blog_cats ORDER BY catTitle');
    while($row2 = $stmt2->fetch()){

        $stmt3 = $db->prepare('SELECT catID FROM blog_post_cats WHERE catID = :catID AND postID = :postID') ;
        $stmt3->execute(array(':catID' => $row2['catID'], ':postID' => $row['postID']));
        $row3 = $stmt3->fetch(); 

        if($row3['catID'] == $row2['catID']){
            $checked = 'checked=checked';
        } else {
            $checked = null;
        }

        echo "<input type='checkbox' name='catID[]' value='".$row2['catID']."' $checked> ".$row2['catTitle']."<br />";
    }

    ?>

以上是编辑帖子页面的相关代码部分。我尝试了几种解决方案,但我真的不明白我在做什么,博客本身是一个非常简单的安装(甚至比 phpbb 更简单),所以在我迁移之前,我从来不需要处理除了 html、css 和 js 之外的事情。我该如何解决此错误?

php arrays boolean offset
1个回答
0
投票

看起来

$row2
$row3
正在通过其他框架中的某种机制转换为布尔值(true 或 false)。我建议在整个框架中搜索
$row2
$row3
的每个实例或使用,以找出具体发生的情况。如果这是由于 PHP 版本的更新或更改造成的,那么可以合理地假设其他可能更重要的东西也可能被破坏。

如果您可以确认这是一个单独的、无关紧要的问题(有时

$row2
将是一个预期的数组,有时是一个布尔值,在其他地方没有任何影响),这样的事情应该可以工作:

更换

if($row3['catID'] == $row2['catID']){

if( is_array( $row3 ) && isset( $row3['catID'] && is_array( $row2 ) && isset( $row2['catID'] && $row3['catID'] == $row2['catID']){

这基本上是检查每个变量是否实际上是一个数组,然后在比较之前检查每个特定的数组键是否存在。

还有其他一些方法可以做同样的事情,例如简单地检查

$row3['catID']
是否已使用
isset
声明,等等

再次请记住,这是一个廉价的修复方法。您应该通过检查使用并当然声明

$row2
$row3
的每一行代码来确切地发现发生这种情况的原因,以确保导致此问题的原因不会或不会导致可能不会触发的危险警告。

© www.soinside.com 2019 - 2024. All rights reserved.