我从数据库获取信息,将其保存在数组中并以循环结构的形式回显它,当我尝试将修改后的信息保存到数据库时遇到问题。
我收到此错误:
致命错误:[] 运算符不支持......中的字符串
代码:
$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);
有人可以给我提示我做错了什么吗?
尝试在字符串上使用短数组推送语法时,您会收到此错误。
比如这个
$foo = 'foo';
$foo[] = 'bar'; // ERROR!
我大胆猜测您的一个或多个
$name
、$date
、$text
或 $date2
变量已初始化为字符串。
再次查看您的问题,看起来您实际上并不想将它们用作数组,因为您将它们视为进一步的字符串。
如果是这样,请将您的作业更改为
$name = $row['name'];
$date = $row['date'];
$text = $row['text'];
$date2 = $row['date2'];
PHP 7 使用 empty-index 数组推送语法加强了对代码的控制。
明确地说,这些在 PHP 7+ 中工作正常
$previouslyUndeclaredVariableName[] = 'value'; // creates an array and adds one entry
$emptyArray = []; // creates an array
$emptyArray[] = 'value'; // pushes in an entry
什么不起作用正在尝试使用空索引推送任何声明为字符串、数字、对象等的变量,即
$declaredAsString = '';
$declaredAsString[] = 'value';
$declaredAsNumber = 1;
$declaredAsNumber[] = 'value';
$declaredAsObject = new stdclass();
$declaredAsObject[] = 'value';
所有这些都会导致致命错误。
$name
、
$date
、
$text
或
$date2
定义为字符串,例如:
$name = 'String';
然后,如果你将它视为数组,它将给出致命错误:
$name[] = 'new value'; // fatal error
要解决您的问题,只需在循环开头添加以下代码:
$name = array();
$date = array();
$text = array();
$date2 = array();
这会将它们的值重置为数组,然后您就可以将它们用作数组。
从 PHP 7.0.x 迁移到 PHP 7.1.x/ 中进行了描述
在我的字符串不再支持空索引运算符 将空索引运算符应用于字符串(例如 $str[] = $x)会引发致命错误,而不是默默地转换为数组。
案例中,这只是一个初始化。我通过将 $foo=''
替换为
$foo=[]
来修复它。
$foo='';
$foo[]='test';
print_r($foo);
$users = array(); // not $users = ";
$users[] = "762";
$name = array();
$name[] = $row['name'];
$a['index'] = [];
$a['index'][] = 'another value';
$a['index'][] = 'another value';
$a['index'][] = 'another value';
$a['index'][] = 'another value';
我发现这可能是与从 php 5 到 php 7。php 5 更能容忍是否是一个歧义。 变量是一个数组,或者不是 php 7 的数组。大多数情况下解决方案 是显式声明数组,如本答案中所述。我只是在将 php5 迁移到 php7 后解决 WordPress 插件的问题。 由于插件代码依赖于用户输入,并且它本质上在代码中用作字符串或数组,因此我添加了以下代码以防止致命错误:
if(is_array($variable_either_string_or_array)){
// if it's an array, declaration is allowed:
$variable_either_string_or_array[]=$additionalInfoData[$i];
}else{
// if it's not an array, declaration it as follows:
$variable_either_string_or_array=$additionalInfoData[$i];
}
这是我需要添加的唯一修改,以使插件能够防 php7。显然不是“最佳实践”,我宁愿阅读并理解完整的代码..但需要快速修复。
$foo = array();
$foo[] = 'test'; // error
$foo[] = "test"; // working fine
$name=array();
$date=array();
$text=array();
$date2=array();
while ($row = mysql_fetch_array($nameresult1, MYSQL_ASSOC)) {
$name[] = $row['name'];
$date[] = $row['date'];
$text[] = $row['text'];
$date2[] = $row['date2 '];
}
$arr = [];
$arr[] = 'add';
$arr = array_shift($arr); // <-- return array_shift is boolean not array ;)
//array_shift(array &$array): mixed
$arr[] = 'next'; // become error