Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

PHP 스크립트로 MySQL 테이블의 NULL 값 처리하는 방법

PHP 스크립트에서는 if...else 조건문을 활용하여 NULL 값 여부에 따라 쿼리를 다르게 작성할 수 있습니다. MySQL에서 NULL은 '값이 없음'을 의미하므로 일반적인 비교 연산자(=)로는 비교할 수 없고, 반드시 IS NULL 또는 IS NOT NULL 구문을 사용해야 한다는 점이 핵심입니다.

예제 소개

다음 예제에서는 아래와 같은 데이터가 저장된 'tcount_tbl' 테이블을 사용합니다.

mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|      mahran     |       20       |
|      mahnaz     |      NULL      |
|       Jen       |      NULL      |
|       Gill      |       20       |
+-----------------+----------------+
4 rows in set (0.00 sec)

위 결과에서 확인할 수 있듯이 mahnaz와 Jen의 tutorial_count 필드에는 NULL 값이 저장되어 있습니다.

PHP 스크립트 예제

아래 PHP 스크립트는 외부에서 전달받은 'tutorial_count' 값을 테이블의 기존 값과 비교합니다. 변수에 값이 설정되어 있으면 '=' 연산자로 일치하는 행을 조회하고, 값이 없으면 'IS' 구문을 사용해 NULL인 행을 조회합니다.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   if( isset($tutorial_count )) {
      $sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl
         WHERE tutorial_count = $tutorial_count';
   } else {
      $sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl
         WHERE tutorial_count IS $tutorial_count';
   }

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']} <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "--------------------------------<br>";
   }
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

코드 동작 방식

  • isset($tutorial_count): 외부에서 전달된 변수에 값이 존재하는지 먼저 확인합니다.
  • 값이 존재하면 WHERE 절에서 '=' 연산자를 사용하여 해당 값과 일치하는 행만 조회합니다.
  • 값이 존재하지 않으면 'IS' 구문을 사용하여 tutorial_count가 NULL인 행을 조회합니다.
  • 조회된 결과는 while 루프와 mysql_fetch_array() 함수를 통해 저자 이름과 카운트 값이 화면에 출력됩니다.

참고 사항

위 예제에 사용된 mysql_* 계열 함수(mysql_connect, mysql_query 등)는 PHP 5.5부터 지원이 중단(deprecated)되었으며, PHP 7부터는 완전히 제거되었습니다. 따라서 실제 프로젝트에서는 mysqli 확장 또는 PDO를 사용하는 것이 좋습니다. 또한 SQL 인젝션 공격을 방지하려면 외부에서 들어오는 입력값을 반드시 준비된 문(prepared statement)과 파라미터 바인딩으로 처리해야 안전합니다.