我从数据库中获取信息,将其保存在数组中并以循环结构的形式回显它,当我尝试将修改后的信息保存到数据库时,我遇到了问题.
我收到此错误:致命错误:[]运算符不支持....
码:
$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)
所有这些都会导致致命的错误.
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)
这会将它们的值重置为数组,然后您就可以将它们用作数组.
从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)