치명적 오류: 문자열에 대해 [] 연산자가 지원되지 않습니다.
데이터베이스에서 정보를 가져와 배열에 저장하고 루프 구조의 형태로 에코하고 있으며 수정된 정보를 데이터베이스에 저장하려고 할 때 문제가 발생합니다.
다음 오류가 나타납니다.
치명적 오류: [] 연산자가 문자열에 대해 지원되지 않습니다.
코드:
$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'];
해결했습니다!
$a['index'] = [];
$a['index'][] = 'another value';
$a['index'][] = 'another value';
$a['index'][] = 'another value';
$a['index'][] = 'another value';
필스의 답변에 대한 Jeremy Young의 의견에 동의합니다.
이것은 php 5에서 php 7로의 이행과 관련된 문제일 수 있습니다.ph 5는 변수가 배열인지 아닌지에 대해 php 7보다 아미비구성에 더 관대합니다.대부분의 경우 해결책은 이 답변에 설명된 대로 어레이를 명시적으로 선언하는 것입니다.
php5를 php7로 이행한 후 Wordpress 플러그인을 촬영하는 데 문제가 있었습니다.플러그인 코드는 사용자 입력에 의존하여 본질적으로 문자열 또는 배열로 사용되었기 때문에 치명적인 오류를 방지하기 위해 다음 코드를 에 추가했습니다.
if(is_array($variable_either_string_or_array)){
// if it's an array, declaration is allowed:
$variable_either_string_or_array[]=$additionalInfoData[$i];
}else{
// if it's not an array, declaration it as follows:
$variable_either_string_or_array=$additionalInfoData[$i];
}
이것은 플러그인 php7을 방지하기 위해 추가할 필요가 있는 유일한 수정이었습니다.'베스트 프랙티스'가 아니라 코드 전체를 읽고 이해하는 것이 좋습니다.하지만 빠른 해결이 필요했다.
나도 비슷한 상황이었어
$foo = array();
$foo[] = 'test'; // error
$foo[] = "test"; // working fine
이렇게 코딩하면 오류가 수정됩니다.
$name=array();
$date=array();
$text=array();
$date2=array();
while ($row = mysql_fetch_array($nameresult1, MYSQL_ASSOC)) {
$name[] = $row['name'];
$date[] = $row['date'];
$text[] = $row['text'];
$date2[] = $row['date2 '];
}
언급URL : https://stackoverflow.com/questions/5879675/fatal-error-operator-not-supported-for-strings
'programing' 카테고리의 다른 글
TDD용 JavaScript 유닛 테스트 도구 (0) | 2022.10.08 |
---|---|
Symfony 3.4.6 - 10.1.37-MariaDB-0+deb9u1 - 인덱스 열 크기가 너무 큼 (0) | 2022.10.08 |
도커 컨테이너 내부에서 MariaDB를 수행할 수 없습니다. (0) | 2022.10.08 |
'super'는 Python에서 무엇을 합니까? - super()의 차이점.__init__() 및 명시적 슈퍼클래스 __init_() (0) | 2022.10.08 |
문자열 스트레이트 JavaScript 잘라내기 (0) | 2022.10.08 |