데이터베이스에서 정보를 가져와 배열에 저장하고 루프 구조의 형태로 에코하고 있으며 수정된 정보를 데이터베이스에 저장하려고 할 때 문제가 발생합니다.
다음 오류가 나타납니다.
치명적 오류: [] 연산자가 문자열에 대해 지원되지 않습니다.
코드:
$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'];