问题:致命错误:[]运算符不支持字符串

Hen*_*kka 62 php mysql

我从数据库中获取信息,将其保存在数组中并以循环结构的形式回显它,当我尝试将修改后的信息保存到数据库时,我遇到了问题.

我收到此错误:致命错误:[]运算符不支持....

码:

    $namesql1 = "SELECT name,date,text,date2 FROM table WHERE something= '$something'";
    $nameresult1 = mysql_query($namesql1);
    $countrows = mysql_num_rows($nameresult1);
    while ($row = mysql_fetch_array($nameresult1, MYSQL_ASSOC)) {
        $name[] = $row['name'];
        $date[] = $row['date'];
        $text[] = $row['text'];
        $date2[] = $row['date2 '];
    }

/** SOME CODE HERE **/

    $wrotesql = "UPDATE service_report SET  name ='$name' , $date = '$date',$text = '$text[$nro]', ser_date = '$date2[$nro]' WHERE something = '$something')";

    $wroteresult = mysql_query($wrotesql);
Run Code Online (Sandbox Code Playgroud)

有人可以给我一个暗示我做错了吗?

谢谢.

Phi*_*hil 94

尝试在字符串上使用短数组推送语法时出现此错误.

例如,这个

$foo = 'foo';
$foo[] = 'bar'; // ERROR!
Run Code Online (Sandbox Code Playgroud)

我大胆猜测的一个或多个你的$name,$date,$text$date2变量已经被初始化为一个字符串.

编辑:再看一下你的问题,看起来你实际上并不想将它们用作数组,因为你将它们视为字符串.

如果是,请将作业更改为

$name = $row['name'];
$date = $row['date'];
$text = $row['text'];
$date2 = $row['date2'];
Run Code Online (Sandbox Code Playgroud)

似乎PHP 7和使用空索引数组推送语法的代码存在一些问题.

要清楚,这些做工精细的PHP 7+

$previouslyUndeclaredVariableName[] = 'value'; // creates an array and adds one entry

$emptyArray = []; // creates an array
$emptyArray[] = 'value'; // pushes in an entry
Run Code Online (Sandbox Code Playgroud)

什么是不行尝试使用空指数上宣布为字符串,数字,对象等,即任何变量推

$declaredAsString = '';
$declaredAsString[] = 'value';

$declaredAsNumber = 1;
$declaredAsNumber[] = 'value';

$declaredAsObject = new stdclass();
$declaredAsObject[] = 'value';
Run Code Online (Sandbox Code Playgroud)

所有这些都会导致致命的错误.

  • 我发现这可能是一个与从php 5迁移到php 7相关的问题.php 5更容忍变量是否是一个数组或者不是php 7.在大多数情况下,解决方案是明确声明数组,如本答案中所述. (15认同)

Sho*_*hoe 38

你可能已经定义$name,$date,$text或者$date2是一个字符串,如:

$name = 'String';
Run Code Online (Sandbox Code Playgroud)

然后,如果你把它当成一个数组,它会给出致命的错误:

$name[] = 'new value'; // fatal error
Run Code Online (Sandbox Code Playgroud)

要解决您的问题,只需在循环开头添加以下代码:

$name = array();
$date = array();
$text = array();
$date2 = array();
Run Code Online (Sandbox Code Playgroud)

这会将它们的值重置为数组,然后您就可以将它们用作数组.


Ale*_*dov 7

从PHP 7.0.x迁移到PHP 7.1.x /中描述了这种行为

字符串不再支持 空索引运算符。将空索引运算符应用于字符串(例如$ str [] = $ x)会引发致命错误,而不是无声地转换为数组。

就我而言,这仅仅是一个初始化。我将其替换$foo=''为来修复$foo=[]

$foo='';
$foo[]='test';
print_r($foo);
Run Code Online (Sandbox Code Playgroud)


小智 7

这在 php 5.6 中可用,在 php 7+ 中你应该首先声明数组

$users = array(); // not $users = ";
$users[] = "762";
Run Code Online (Sandbox Code Playgroud)