Проверка результатов запроса на значение NULL
Определить, возвращает ли оператор SELECT значение NULL, МОЖНО при помощи функции isset().
РНР интерпретирует значение NULL как установленное значение.
Пример проверки на значения NULL для выборки из таблицы test, содержащей три столбца (first, second и third):
<?php
// Формируем и выполняем SQL-запрос
$query = "SELECT first, second, third FROM test";
$tst = mysql_query($query) ;
// Проверяем успешность выполнения запроса
if($tst)
{
echo "<p><b>Error: ".mysql_error () . "</b></p>";
exit ();
}
// Выводим заголовок таблицы
echo "<table>";
while(list($first, $second, $third) = mysql_fetch_row($tst))
{
echo "<tr>";
if(!isset($first)) echo "<td>-</td>";
else echo "<td>$first</td>";
if(!isset($second)) echo "<td>-</td>";
else echo "<td>$second</td>";
if(!isset($third)) echo "<td>-</td>";
else echo "<td>$third</td>";
echo "</tr>";
}
// Выводим тег завершения таблицы
echo "</table>";
?>
Использование функции empty () в данном случае будет не точным, т. к. она возвращает true и для значения NULL, и для пустой строки ("").
Аналогично функции isset(), на равенство пустому значению можно проверять при помощи оператора идентичности === и константы NULL, как это продемонстрировано в листинге ниже.
<?php
// Формируем и выполняем SQL-запрос
$query = "SELECT first, second, third FROM test";
$tst = mysql_query($query);
// Проверяем успешность выполнения запроса
if ($tst)
{
echo "<p><b>Error: ".mysql__error () . "</b><p>";
exit ();
}
// Выводим заголовок таблицы
echo "<table>";
while(list($first, $second, $third) = mysql_fetch_row($tst))
{
echo "<tr>";
if($first === NULL) echo "<td>-</td>";
else echo "<td>$first</td>";
if($second === NULL) echo "<td>-</td>";
else echo "<td>$second</td>";
if($third === NULL) echo "<td>-</td>";
else echo "<td>$third</td>";
echo "</tr>";
}
// Выводим тег завершения таблицы
echo "</table>";
?>
Код в листинге ниже выведет таблицу с единственной строкой, содержащей три прочерка, если в таблице нет ни одной записи.
В таком случае, логично было бы вообще не выводить строки из таблицы.
Решить эту проблему можно при помощи уже функции mysql_num_rows(), возвращающей число строк в результатах запроса.
<?php
// Формируем и выполняем SQL-запрос
$query = "SELECT first, second, third FROM test";
$tst = mysql_query($query); ,
// Проверяем успешность выполнения запроса
if(!$tst)
{
echo "<p><b>Error: " .mysql_error () . "</b></p>";
exit ();
}
// Проверяем, содержит ли результат хоть одну строку
if(mysql_num_rows($tst)>0)
{
// Выводим заголовок таблицы
echo "<table>";
while(list($first, $second, $third) = mysql_fetch_row($tst)
{
echo "<tr>";
if($first === NULL) echo "<td>-</td>";
else echo "<td>$first</td>";
if($second === NULL) echo "<td>-</td>";
else echo "<td>$second</td>";
if($third === NULL) echo "<td>-</td>";
else echo "<td>$third</td>";
echo "</tr>";
}
// Выводим тег завершения таблицы
echo "</table>";
}
?>