Xử lý giá trị NULL – PHP & MySQL

Xử lý giá trị NULL – Bạn có thể sử dụng điều kiện if … else để chuẩn bị truy vấn dựa trên giá trị NULL.

Trong một seri bài viết giới thiệu với các bạn một loạt các hàm xử lý trong MySQL với PHP. Như mysql_query (), INSERT, UPDATE, DELETE … giúp bạn truy vấn dữ liệu, thêm/sửa/xóa các bản ghi. Trong bài này, tôi giới thiệu với các bạn xử lý tình huống giá trị đưa vào là giá trị rỗng.

Bạn đã thấy cách lệnh SELECT cùng với mệnh đề WHERE trong SQL lấy dữ liệu từ bảng MySQL, nhưng khi chúng ta cố gắng cung cấp một điều kiện so sánh giá trị trường hoặc giá trị cột với NULL, nó làm việc không chính xác.

Để xử lý những tình huống như vậy, MySQL cung cấp 3 toán tử:

  • IS NULL: Toán tử này trả về true nếu giá trị cột là NULL.
  • IS NOT NULL: Toán tử này trả về true nếu giá trị côt không là NULL.
  • <=>: Toán tử này so sánh các giá trị, mà (không giống toán tử =) là true khi hai giá trị là NULL.

Các điều kiện liên quan tới NULL là khá đặc biệt. Bạn không thể sử dụng = NULL hoặc != NULL để tìm giá trị NULL trong các cột. Những so sánh như thế luôn luôn thất bại bởi vì nó là không thể để nói rằng có hay không chúng là true. Ngay cả NULL = NULl cũng thất bại.

Để tìm các cột là hoặc không là NULL, sử dụng toán tử IS NULL hoặc IS NOT NULL trong MySQL.

Ví dụ sau đây lấy tutorial_count từ bên ngoài truyền vào. Và sau đó so sánh nó với giá trị có sẵn trong bảng.

Ví dụ xử lý giá trị NULL

Sao chép và dán ví dụ sau vào file mysql_example.php

<html>
   <head>
      <title>Handling NULL</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         $tutorial_count = null;
         if($mysqli->connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli->connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
   
         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 NULL';
         }
         $result = $mysqli->query($sql);
           
         if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
               printf("Author: %s, Count: %d <br />",
                  $row["tutorial_author"], 
                  $row["tutorial_count"]);               
            }
         } else {
            printf('No record found.<br />');
         }
         $mysqli->close();
      ?>
   </body>
</html>

Dữ liệu đầu ra

Truy cập vào mysql_example.php được thực thi trên máy chủ web apache và kết quả đầu ra.

Connected successfully.
No record found.