문제 : 치명적 오류 : [] 연산자가 문자열에 지원되지 않음
데이터베이스에서 정보를 가져 와서 배열에 저장하고 루프 구조가있는 형태로 에코하며 수정 된 정보를 데이터베이스에 저장하려고 할 때 문제가 있습니다.
이 오류가 발생합니다.
치명적인 오류 : [] 연산자가 문자열에 지원되지 않습니다 ....
암호:
$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 및 코드에 몇 가지 문제가있는 것 같습니다 .
명확하게 말하면 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();
이렇게하면 해당 값이 배열로 재설정되고 배열로 사용할 수 있습니다.
Such behavior is described in Migrating from PHP 7.0.x to PHP 7.1.x/
The empty index operator is not supported for strings anymore Applying the empty index operator to a string (e.g. $str[] = $x) throws a fatal error instead of converting silently to array.
In my case it was a mere initialization. I fixed it by replacing $foo=''
with $foo=[]
.
$foo='';
$foo[]='test';
print_r($foo);
'IT TIP' 카테고리의 다른 글
MemoryStream.Close () 또는 MemoryStream.Dispose () (0) | 2020.12.10 |
---|---|
복합 디자인 패턴은 언제 사용해야합니까? (0) | 2020.12.10 |
Gunicorn Nginx 시간 초과 문제 (0) | 2020.12.10 |
.NET Framework 3.5 용 Tuple (.NET 4)에 해당 (0) | 2020.12.10 |
git은 특별히 명명 된 파일 2 개를 무시하지 않습니다. (0) | 2020.12.10 |