MySQLi: manejo de valores nulos

Hemos visto SQL SELECCIONE comando con DÓNDE una sugerencia para obtener datos de una tabla MySQLi, pero cuando intentamos dar una condición que compare el valor de un campo o columna con CERO, no funciona como se esperaba.

Para manejar esta situación, MySQLi proporciona tres declaraciones

  • NULO : el operador devuelve verdadero si el valor de la columna es NULL.

  • NO VACÍO : el operador devuelve verdadero si el valor de la columna no es NULL.

  • <=> 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. Tales comparaciones siempre fallan porque es imposible saber si son ciertas o no. Incluso NULL = NULL no funciona.

Para buscar columnas que sean o no NULL, use IS NULL o IS NOT NULL.

Usar valores NULL en la línea de comandos

Supongamos una mesa tutorials_bks en la base de datos TUTORIALS y contiene dos columnas Identificación y nombredonde el nombre NULL indica que el valor es desconocido –

Ejemplo

Pruebe los siguientes ejemplos:

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>

Para encontrar registros donde la columna de nombre es NULL 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

puedes usar si todavía condición para preparar una consulta basada en un valor nulo.

Ejemplo

El siguiente ejemplo usa el valor tutorial_count externamente 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 successfullyn";
   mysql_close($conn);
?>

🚫