PHP致命错误帮助

时间:2009-10-26 14:16:50

标签: php mysql

我收到以下错误。

Fatal error: Cannot increment/decrement overloaded objects nor string offsets

这是代码。

$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC");

if (!$dbc) {
    // There was an error...do something about it here...
    print mysqli_error();
}

while ($obj = mysqli_fetch_assoc($dbc)) {
    if (!empty($obj['parent_id']) == 0) {
        echo $parent_menu . $obj['id']['label'] = $obj['label'];
        echo $parent_menu . $obj['id']['link'] = $obj['link_url'];
    } else {
        echo $sub_menu . $obj['id']['parent'] = $obj['parent_id'];
        echo $sub_menu . $obj['id']['label'] = $obj['label'];
        echo $sub_menu . $obj['id']['link'] = $obj['link_url'];
        echo $parent_menu . $obj['parent_id']['count']++;
    }
}
mysql_free_result($dbc);

3 个答案:

答案 0 :(得分:1)

您的$obj['parent_id']是一个字符串(包含一个数字,例如"0") - 它不是一个带有count条目的数组。这会更有意义:

$obj['parent_id']++

另外在旁注中,这非常令人困惑:

if (!empty($obj['parent_id']) == 0) {

这会更有意义:

if (empty($obj['parent_id'])) {

答案 1 :(得分:1)

Greg指出了你的问题:你试图增加一个字符串值的字符串偏移count

echo $parent_menu . $obj['parent_id']['count']++;

以下是PHP的作用:

(1)评估$obj['parent_id'],得到一个字符串。

(2)尝试从此字符串中获取offet "count"。在这里,PHP出现了一个主要缺陷:由于字符串具有可以使用括号表示法访问的偏移量以便提取单个字符, PHP将静默地将“count”转换为整数。因此,它会将字符串视为1$obj['parent_id'][1]

(3)尝试增加字符串偏移量 $string[1]++将导致致命错误:

  

PHP致命错误:无法递增 /减少重载对象,字符串偏移 ... ...在线...

PHP还会指向您错误的位置,即文件名和行号。您从问题描述中省略了该部分。下次请告诉我们您的代码段中的哪一行是错误的来源,请包含此信息!

答案 2 :(得分:0)

我认为你的代码有点混乱!

//What did you think here? (!empty() == 0)
while ($obj = mysqli_fetch_assoc($dbc)) {
        if (!empty($obj['parent_id']) == 0) {
                // Echo with assignment trying to save variables?
                echo $parent_menu . $obj['id']['label'] = $obj['label'];
                echo $parent_menu . $obj['id']['link'] = $obj['link_url'];
        } else {
                echo $sub_menu . $obj['id']['parent'] = $obj['parent_id'];
                echo $sub_menu . $obj['id']['label'] = $obj['label'];
                echo $sub_menu . $obj['id']['link'] = $obj['link_url'];
                echo $parent_menu . $obj['parent_id']['count']++;
        }
}

我不是在评判你的风格,但我认为如果你改变你的代码风格,你就会更容易跟踪错误。

问题发生在$obj['parent_id']['count']++; 这不是数字,不能使用增量。 $obj['parent_id']甚至不是具有'count'元素的数组。此外,如果你想创建一个计数器,这可能会在下一个循环中删除,因为你将它保存在$obj变量上,这将被覆盖。

我认为你需要这样或类似的东西。无法在if子句中找出​​您想要的准确标准。或者柜台想要计算什么? parent_id的总和或parent_id的数量。

$counter = 0;
while ($obj = mysqli_fetch_assoc($dbc)) {
        if (empty($obj['parent_id'])) {
                echo $parent_menu . $obj['label'];
                echo $parent_menu . $obj['link_url'];
        } else {
                echo $sub_menu . $obj['parent_id'];
                echo $sub_menu . $obj['label'];
                echo $sub_menu . $obj['link_url'];
                echo $parent_menu . ($counter++);
        }
}

希望有所帮助