Проблема с: Неустранимая ошибка: оператор [] не поддерживается для строк в - PullRequest
56 голосов
/ 04 мая 2011

Я получаю информацию из базы данных, сохраняю ее в массив и отображаю ее в форме со структурой цикла, и у меня возникают проблемы при попытке сохранить измененную информацию в базу данных.

ЯПолучение этой ошибки:

Неустранимая ошибка: оператор [] не поддерживается для строк в ....

Код:

$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);    

Может кто-нибудьподскажите, пожалуйста, что я делаю не так?

Спасибо.

Ответы [ 3 ]

88 голосов
/ 04 мая 2011

Вы получаете эту ошибку при попытке использовать синтаксис 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 массива empty-index .

Чтобы было понятно, эти отлично работают в PHP 7 +

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

$emptyArray = []; // creates an array
$emptyArray[] = 'value'; // pushes in an entry

Что не работает пытается использовать empty-index push для любой переменной, объявленной как строка, число, объект и т. Д., Т. Е.

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

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

$declaredAsObject = new stdclass();
$declaredAsObject[] = 'value';

Все приводит к фатальной ошибке.

38 голосов
/ 04 мая 2011

Вы, вероятно, определили $name, $date, $text или $date2 как строку, например:

$name = 'String';

Тогда, если вы будете обращаться с ним как с массивом, это приведет к фатальной ошибке:

$name[] = 'new value'; // fatal error

Чтобы решить вашу проблему, просто добавьте следующий код в начале цикла:

$name = array();
$date = array();
$text = array();
$date2 = array();

Это сбросит их значение в массив, и тогда вы сможете использовать их в качестве массивов.

5 голосов
/ 21 февраля 2019

Такое поведение описано в Миграция с PHP 7.0.x на PHP 7.1.x /

Пустой оператор индекса больше не поддерживается для строк Применение пустого оператора индекса к строке (например, $ str [] = $ x) приводит к фатальной ошибке, а не к автоматическому преобразованию в массив.

В моем случае это былопростая инициализация.Я исправил это, заменив $foo='' на $foo=[].

$foo='';
$foo[]='test';
print_r($foo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...