
We have seen SQL SELECT command along with WHERE clause to fetch data from MySQLi table, but when we try to give a condition, which compare field or column value to NULL, it does not work properly.
To handle such situation MySQLi provides three operators
IS NULL − operator returns true if column value is NULL.
IS NOT NULL − operator returns true if column value is not NULL.
<=> − operator compares values, which (unlike the = operator) is true even for two NULL values.
Conditions involving NULL are special. You cannot use = NULL or != NULL to look for NULL values in columns. Such comparisons always fail because it's impossible to tell whether or not they are true. Even NULL = NULL fails.
To look for columns that are or are not NULL, use IS NULL or IS NOT NULL.
Suppose a table tutorials_bks in TUTORIALS database and it contains two columns id and name, where a NULL name indicates that the value is unknown −
Try out the following examples −
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)
+----+---------+
| id | book |
+----+---------+
| 1 | java |
| 2 | java |
| 3 | html |
| 4 | c++ |
| 5 | Android |
| 6 | |
| 7 | |
| 8 | |
| 9 | NULL |
| 10 | NULL |
| 11 | NULL |
+----+---------+
11 rows in set (0.00 sec)
mysql>
To find records where the name column is or is not NULL, the queries should be written like this −
mysql> SELECT * FROM tutorials_bks WHERE book = "null"; +----+------+ | id | book | +----+------+ | 9 | NULL | | 10 | NULL | | 11 | NULL | +----+------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM tutorials_bks WHERE book ! = "null"; +----+---------+ | id | book | +----+---------+ | 1 | java | | 2 | java | | 3 | html | | 4 | c++ | | 5 | Android | | 6 | | | 7 | | | 8 | | +----+---------+ 8 rows in set (0.00 sec) mysql> SELECT * FROM tutorials_bks WHERE book = ""; +----+------+ | id | book | +----+------+ | 6 | | | 7 | | | 8 | | +----+------+ 3 rows in set (0.01 sec)
You can use if...else condition to prepare a query based on NULL value.
Following example takes tutorial_count from outside and then compares it with the value available in the table.
<?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);
?>