MySQLi - Manejo de valores NULL
Hemos visto SQL SELECT comando junto con WHERE cláusula para obtener datos de la tabla MySQLi, pero cuando intentamos dar una condición, que compara el valor de campo o columna con NULL, no funciona correctamente.
Para manejar tal situación, MySQLi proporciona tres operadores
IS NULL - el operador devuelve verdadero si el valor de la columna es NULL.
IS NOT NULL - el operador devuelve verdadero si el valor de la columna no es NULL.
<=> - el operador compara valores, que (a diferencia del operador =) es verdadero incluso para dos valores NULL.
Las condiciones que involucran NULL son especiales. No puede usar = NULL o! = NULL para buscar valores NULL en columnas. Estas comparaciones siempre fallan porque es imposible saber si son ciertas o no. Incluso NULL = NULL falla.
Para buscar columnas que sean o no NULL, use IS NULL o IS NOT NULL.
Usando valores NULL en el símbolo del sistema
Supongamos una mesa tutorials_bks en la base de datos de TUTORIALES y contiene dos columnas id y name, donde un nombre NULL indica que el valor es desconocido -
Ejemplo
Pruebe los siguientes ejemplos:
[email protected]# 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>
Para encontrar registros donde la columna de nombre es o no NULL, las consultas deben escribirse así:
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)
Manejo de valores NULL en script PHP
Puede utilizar la condición if ... else para preparar una consulta basada en el valor NULL.
Ejemplo
El siguiente ejemplo toma tutorial_count del exterior y luego lo compara con el valor disponible en la tabla.
<?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);
?>