치명적 오류: 문자열에 대해 [] 연산자가 지원되지 않습니다.

데이터베이스에서 정보를 가져와 배열에 저장하고 루프 구조의 형태로 에코하고 있으며 수정된 정보를 데이터베이스에 저장하려고 할 때 문제가 발생합니다.

다음 오류가 나타납니다.

치명적 오류: [] 연산자가 문자열에 대해 지원되지 않습니다.

코드:

$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 

string, number, object 등으로 선언된 변수에 대해 빈 인덱스 푸시를 사용하려고 하면 효과가 없습니다.

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



이것은 php 5.6에서 php 7+에서 사용할 수 있습니다. 먼저 어레이를 선언해야 합니다.

$users = array(); // not $users = "; $users[] = "762"; 



변수를 문자열로 선언하고 배열로 쓸 때 동일한 오류가 발생했습니다.이것이 오류 없이 작동하는 방법입니다.

$name = array(); $name[] = $row['name'];