我从数据库中获取信息,将其保存在数组中并以循环结构的形式回显它,当我尝试将修改后的信息保存到数据库时,我遇到了问题。
我收到了这个错误:
致命错误:[...]中的字符串不支持[]运算符。
代码:
$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 '];
}
.
.
.
FORM
.
.
.
$wrotesql = "UPDATE service_report SET name ='$name' , $date = '$date',$text = '$text[$nro]', ser_date = '$date2[$nro]' WHERE something = '$something')";
$wroteresult=mysql_query($wrotesql);
有人可以给我一个暗示我做错了吗?
谢谢。
答案 0 :(得分:84)
尝试在字符串上使用短数组推送语法时会出现此错误。
例如,这个
$foo = 'foo';
$foo[] = 'bar'; // ERROR!
我猜测您的$name
,$date
,$text
或$date2
个变量中的一个或多个已初始化为字符串。
编辑:再次查看您的问题,看起来您实际上并不想将它们用作数组,因为您将它们视为字符串进一步向下。
如果是,请将作业更改为
$name = $row['name'];
$date = $row['date'];
$text = $row['text'];
$date2 = $row['date2'];
使用 empty-index 数组推送语法,PHP 7和代码似乎存在一些问题。
为清楚起见,这些在PHP 7 +中正常工作
$previouslyUndeclaredVariableName[] = 'value'; // creates an array and adds one entry
$emptyArray = []; // creates an array
$emptyArray[] = 'value'; // pushes in an entry
无法正常工作试图使用 empty-index 推送任何声明为字符串,数字,对象等的变量,即
$declaredAsString = '';
$declaredAsString[] = 'value';
$declaredAsNumber = 1;
$declaredAsNumber[] = 'value';
$declaredAsObject = new stdclass();
$declaredAsObject[] = 'value';
所有都会导致致命错误。
答案 1 :(得分:38)
您可能已将$name
,$date
,$text
或$date2
定义为字符串,例如:
$name = 'String';
然后,如果你将它视为一个数组,它将给出致命的错误:
$name[] = 'new value'; // fatal error
要解决您的问题,只需在循环开头添加以下代码:
$name = array();
$date = array();
$text = array();
$date2 = array();
这会将它们的值重置为数组,然后您就可以将它们用作数组。
答案 2 :(得分:5)
Migrating from PHP 7.0.x to PHP 7.1.x/
中描述了这种行为字符串不再支持空索引运算符 将空索引运算符应用于字符串(例如$ str [] = $ x)会引发致命错误,而不是无声地转换为数组。
在我的case中,这仅仅是初始化。我通过将$foo=''
替换为$foo=[]
来解决了这个问题。
$foo='';
$foo[]='test';
print_r($foo);
答案 3 :(得分:1)
解决了!
$a['index'] = [];
$a['index'][] = 'another value';
$a['index'][] = 'another value';
$a['index'][] = 'another value';
$a['index'][] = 'another value';
答案 4 :(得分:1)
我同意杰里米·杨(Jeremy Young)对Phils答案的评论:
我发现这可能是与从迁移有关的问题 php 5到php7。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-proof。显然不是“最佳实践”,我宁愿阅读并理解完整的代码..但需要快速修复。
答案 5 :(得分:0)
这在php 5.6中可用 在php 7+中,您应该先声明数组
$users = array(); // not $users = ";
$users[] = "762";
答案 6 :(得分:0)
我有类似的情况:
$foo = array();
$foo[] = 'test'; // error
$foo[] = "test"; // working fine
答案 7 :(得分:0)
在将变量声明为字符串然后将其写入数组时,我遇到了同样的错误。 这是它没有错误的工作方式
$name = array();
$name[] = $row['name'];