현재 위치: > 최신 기사 목록> mysql_fetch_assoc을 사용할 때 빈 배열이 발생할 때 어떻게해야합니까?

mysql_fetch_assoc을 사용할 때 빈 배열이 발생할 때 어떻게해야합니까?

gitbox 2025-05-28

PHP를 사용하여 MySQL 데이터베이스를 작동 할 때 MySQL_Fetch_Assoc 함수는 쿼리 결과에서 데이터 행을 얻는 일반적인 방법입니다. 연관 배열을 반환하고 키 이름은 필드 이름에 해당하고 키 값은 필드 값에 해당합니다. 그러나 때때로 우리는 mysql_fetch_assoc이 빈 배열 또는 false를 반환하는 상황이 발생하여 프로그램이 데이터를 올바르게 처리하지 못하게합니다. 이 기사는이 문제의 몇 가지 일반적인 원인을 자세히 분석하고 해당 솔루션을 제공합니다.


1. 쿼리 결과가 비어 있습니다

가장 일반적인 이유는 실행 된 SQL 쿼리가 데이터 자체를 반환하지 않기 때문입니다. 예를 들어, 테이블의 조건을 충족시키는 레코드가 없으면 쿼리 결과가 비어 있고 mysql_fetch_assoc은 false를 반환하며 경우에 따라 데이터를 가져 오기 위해 while 루프를 사용할 때 빈 배열로 나타납니다.

샘플 코드 :

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FROM users WHERE id = 99999', $link); // 가정id존재하지 않습니다

if (!$result) {
    die('쿼리가 실패했습니다:' . mysql_error());
}

$row = mysql_fetch_assoc($result);

if ($row === false) {
    echo "데이터가 반환되지 않습니다,쿼리 결과는 비어 있습니다";
} else {
    print_r($row);
}
?>

해결책:
쿼리 조건이 올바른지 확인하고 조건을 충족하는 데이터 테이블에 레코드가 있는지 확인하십시오.


2. SQL 쿼리 실행에 실패했습니다

SQL 명령문 구문 오류 또는 기타 이유로 인해 쿼리가 실패하면 MySQL_Query가 False를 반환합니다. MySQL_Fetch_Assoc 에 전달 된 것은 유효한 결과 자원이 아니므로 데이터는 자연스럽게 검색되지 않습니다.

샘플 코드 :

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FORM users', $link); // 구문 오류:FORM 그럴 것입니다 FROM

if (!$result) {
    die('쿼리가 실패했습니다:' . mysql_error());
}

$row = mysql_fetch_assoc($result); // 여기에서 실행되지 않습니다,위의 것이 종료 되었기 때문입니다
?>

해결책:
쿼리를 실행 한 후 $ result가 False 인지 확인하십시오. 실패한 경우 mysql_error ()를 사용하여 오류 메시지를보고 SQL 구문을 수정하십시오.


3. 데이터베이스 연결 또는 데이터베이스 선택에 실패했습니다

데이터베이스 연결에 실패하거나 데이터베이스 선택이 실패하면 쿼리를 전혀 실행할 수 없으므로 예외적 인 결과가 발생합니다.

샘플 코드 :

 <?php
$link = mysql_connect('gitbox.net', 'username', 'wrongpassword');
if (!$link) {
    die('연결이 실패했습니다:' . mysql_error());
}

$db_selected = mysql_select_db('testdb', $link);
if (!$db_selected) {
    die('데이터베이스를 선택하지 못했습니다:' . mysql_error());
}
?>

해결책:
데이터베이스 연결 매개 변수가 정확하고 데이터베이스가 존재하고 데이터베이스의 연결 및 선택이 성공했는지 확인하십시오.


4. 결과 세트를 읽었습니다

mysql_fetch_assoc을 호출 할 때마다 포인터가 뒤로 이동하고 다음 줄을 읽습니다. 여러 통화 후 포인터가 종말에 도달하면 호출이 거짓을 반환합니다.

샘플 코드 :

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FROM users', $link);

while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}

// 포인터가 끝났습니다,다음 통화를 반환합니다 false
$next = mysql_fetch_assoc($result);
var_dump($next); // bool(false)
?>

해결책:
결과를 여러 번 통과 해야하는 경우 데이터를 배열에 저장하거나 쿼리를 다시 실행하는 것이 좋습니다.


5. 오래된 MySQL 확장자를 사용하십시오

PHP 관계자는 MySQL_* 일련의 기능을 포기했으며 대신 MySQLI 또는 PDO를 사용하는 것이 좋습니다. 오래된 MySQL_* 함수는 새로운 환경에서 불안정 할 수 있습니다.

대신 mysqli를 사용하십시오.

 <?php
$link = mysqli_connect('gitbox.net', 'username', 'password', 'testdb');

if (!$link) {
    die('연결이 실패했습니다:' . mysqli_connect_error());
}

$result = mysqli_query($link, 'SELECT * FROM users');

if (!$result) {
    die('쿼리가 실패했습니다:' . mysqli_error($link));
}

while ($row = mysqli_fetch_assoc($result)) {
    print_r($row);
}

mysqli_close($link);
?>

요약

mysql_fetch_assoc 빈 배열 또는 false를 반환합니다. 일반적으로 다음 요소와 관련이 있습니다.

  • 쿼리 결과 자체가 비어 있습니다.

  • SQL 명령문 실행이 실패했습니다.

  • 데이터베이스 연결 또는 선택이 실패했습니다.

  • 결과 세트 포인터가 끝났습니다.

  • 오래된 MySQL 확장자를 사용하십시오.

SQL 문, 연결 상태 및 쿼리 결과를 확인하면 문제의 근본 원인을 찾아 MySQLI 또는 PDO로 업그레이드하여 코드 보안 및 안정성을 향상시킬 수 있습니다.