programing

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

luckcodes 2022. 10. 8. 10:00

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

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

다음 오류가 나타납니다.

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

코드:

$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