Проблема с: Неустранимая ошибка: оператор [] не поддерживается для строк в
Я получаю информацию из базы данных, сохраняю ее в массив и отображаю в форме со структурой цикла, и у меня возникают проблемы при попытке сохранить измененную информацию в базу данных.
Я получаю эту ошибку:
Неустранимая ошибка: оператор [] не поддерживается для строк в....
Код:
$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);
Может, кто-нибудь подскажет, что я делаю не так?
Спасибо.
Ответы
Ответ 1
Эта ошибка появляется при попытке использовать синтаксис push короткого массива в строке.
Например, это
$foo = 'foo';
$foo[] = 'bar'; // ERROR!
Я бы рискнул предположить, что одна или несколько переменных $name
, $date
, $text
или $date2
были инициализированы в виде строки.
Изменить: Снова глядя на ваш вопрос, похоже, что вы на самом деле не хотите использовать их в качестве массивов, поскольку вы рассматриваете их как строки ниже.
Если так, измените свои назначения на
$name = $row['name'];
$date = $row['date'];
$text = $row['text'];
$date2 = $row['date2'];
Кажется, есть некоторые проблемы с PHP 7 и кодом, использующим синтаксис push массива пустого индекса.
Чтобы было понятно, они отлично работают в 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';
Все это приводит к фатальной ошибке.
Ответ 2
Вы, вероятно, определили $name
, $date
, $text
или $date2
как строку, например:
$name = 'String';
Затем, если вы относитесь к нему как к массиву, это приведет к фатальной ошибке:
$name[] = 'new value'; // fatal error
Чтобы решить вашу проблему, просто добавьте следующий код в начале цикла:
$name = array();
$date = array();
$text = array();
$date2 = array();
Это будет reset их значение для массива, а затем вы сможете использовать их как массивы.
Ответ 3
Такое поведение описано в разделе Миграция с PHP 7.0.x на PHP 7.1.x/
Оператор пустого индекса больше не поддерживается для строк. Применение оператора пустого индекса к строке (например, $ str [] = $ x) приводит к фатальной ошибке, а не к автоматическому преобразованию в массив.
В моем случае это была простая инициализация. Я исправил это, заменив $foo=''
на $foo=[]
.
$foo='';
$foo[]='test';
print_r($foo);
Ответ 4
это было доступно в php 5.6
в php 7+ вы должны сначала объявить массив
$users = array(); // not $users = ";
$users[] = "762";