При выполнении SQL-запроса к базе данных в качестве результата выполнения могут быть возвращены строки и столбцы таблицы. Также может быть возвращено пустое значение, если в таблице не найдены данные, соответствующие запросу.
Обычным алгоритмом обработки полученного ответа от базы данных является построчное извлечение результата SQL-запроса и обработка каждой строки как массива или объекта.
Но для некоторых ситуаций это является излишним — иногда нам нужно только узнать, найдено ли что-то в базе данных или возвращён пустой результат.
Для определения, является ли результат запроса к базе данных пустым можно использовать функцию mysqli_num_rows(). Эта функция подсчитывает количество строк в возвращённом результате. Если количество строк равно 0, значит результат пуст. Если количество строк больше нуля, значит результат не пуст.
Пример использования функции mysqli_num_rows() — данный скрипт проверяет, имеется ли в таблице столбец с указанным именем. Если результат выполнения SQL-запроса пуст, значит столбец отсутствует. Если количество строк в результатах выполнения SQL-запроса больше нуля, значит столбец существует:
<?php $db_user = 'root'; $db_password = ''; $db_name = 'TestDB'; $mysqli = new mysqli("localhost", $db_user, $db_password, $db_name); if ($mysqli->connect_errno) { printf("Не удалось подключиться: %s\n", $mysqli->connect_error); exit(); } $query = "SHOW COLUMNS FROM TestTABLE WHERE field = 'test_column';"; $result = $mysqli->query($query); if (mysqli_num_rows($result)==0) { echo 'The column does not exist' . PHP_EOL; } else { echo 'The column exists' . PHP_EOL; }
Примечание: этот метод может не сработать, если SQL-запрос завершился ошибкой. То есть вам отдельно нужно проверять, не завершился ли запрос к базе данных ошибкой. Если вы не проверяете результат SQL-запроса на ошибку, то в возвращаемых данных может содержаться информация об ошибке и количество строк будет не равно нулю. Это может нарушить логику работы вашего скрипта.
Примечание 2: В более старых источниках вы можете увидеть упоминание функции mysql_num_rows. Данная функция на текущий момент является устаревшей, вместо неё следует использовать функцию mysqli_num_rows().
Связанные статьи:
- Как вывести список пользователей MySQL / MariaDB и их привилегии (с помощью клиента СУБД и PHP) (100%)
- PHP не отображает эмодзи из базы данных MySQL / MariaDB (РЕШЕНО) (100%)
- Ошибка «PHP Fatal error: Uncaught mysqli_sql_exception: No database selected» (РЕШЕНО) (100%)
- Изменение в директиве upload_max_filesize в php.ini на Linux не имеют эффекта (разрешение проблемы) (50%)
- Вывод в реальном времени результатов выполнения shell_exec в PHP (50%)
- Аутентификация по паролю и unix_socket в MySQL и MariaDB. Исправление ошибки #1698 - Access denied for user ‘root’@’localhost’ (RANDOM - 23.1%)