Я ищу лучший способ проверить и посмотреть, были ли какие-либо результаты возвращены в запросе. Я чувствую, что очень часто пишу эту часть кода, а иногда получаю ошибки, а иногда и нет.
Например, я запускаю этот запрос, чтобы проверить, существует ли имя пользователя до вставки нового в базу данных.
$result = mysql_query("SELECT * FROM ...");
Затем я хочу проверить и посмотреть, были ли возвращены какие-либо результаты. Вот один из способов:
if (!$result) { PERFORM ACTION }
Если первый способ не работает, то иногда это будет:
if (mysql_num_rows($result)==0) { PERFORM ACTION }
Тогда я даже увидел, что могу сделать это так на днях:
list($total) = mysql_fetch_row($result); if ($total==0) { PERFORM ACTION }
Каков наилучший способ сделать это?
if (mysql_num_rows($result)==0) { PERFORM ACTION }
Это получает мой голос.
Предполагаемый запрос OP не возвращает никакой ошибки, поэтому это должно быть одним из способов
Один из способов сделать это – проверить, что возвращает mysql_num_rows
. Минимальным полным примером будет следующее:
if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) { // there are results in $result } else { // no results }
Но рекомендуется проверить возвращаемое значение mysql_query
и правильно обработать его в случае, если оно false
(что было вызвано ошибкой); возможно, также вызвав mysql_error
и mysql_error
ошибку где-нибудь.
Всякий раз, когда мы выполняем запросы для получения некоторых данных, он возвращается как объект. Затем большинство из нас преобразует его в массив, чтобы легко перебирать строки. В php «empty ()» функция используется для проверки того, является ли массив пустым, т. Е. Если в нем нет данных. Поэтому мы можем проверить, не является ли возвращенное представление массива запроса пустым, делая это
if(!empty($result)){ //DO STUFF }
Что более логично, чем тестировать ТИП переменной результата перед обработкой? Это либо тип «boolean», либо «resource». Когда вы используете логический параметр для параметра с mysqli_num_rows, будет генерироваться предупреждение, потому что функция ожидает ресурс.
$result = mysqli_query($dbs, $sql); if(gettype($result)=='boolean'){ // test for boolean if($result){ // returned TRUE, eg in case of a DELETE sql echo "SQL succeeded"; } else { // returned FALSE echo "Error: " . mysqli_error($dbs); } } else { // must be a resource if(mysqli_num_rows($result)){ // process the data } mysqli_free_result($result); }
Из всех вышеперечисленных вариантов я бы использовал
if (mysql_num_rows($result)==0) { PERFORM ACTION }
проверка на результат, как показано ниже
if (!$result) { PERFORM ACTION }
Это будет верно, если mysql_error возникает так эффективно, если возникла ошибка, вы можете ввести двойное имя пользователя …
Используйте одно с mysql_fetch_row
потому что «Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query () возвращает ресурс с успехом или FALSE при ошибке.
Для других типов операторов SQL INSERT, UPDATE, DELETE, DROP и т. Д. Mysql_query () возвращает TRUE при успешном завершении или FALSE при ошибке. "
Обычно я использую ===
( тройные равные ) и __LINE__
, __CLASS__
чтобы найти ошибку в моем коде:
$query=mysql_query('SELECT champ FROM table') or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error()); mysql_close(); if(mysql_num_rows($query)===0) { PERFORM ACTION; } else { while($r=mysql_fetch_row($query)) { PERFORM ACTION; } }
в$query=mysql_query('SELECT champ FROM table') or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error()); mysql_close(); if(mysql_num_rows($query)===0) { PERFORM ACTION; } else { while($r=mysql_fetch_row($query)) { PERFORM ACTION; } }
$result = $mysqli->query($query); if($result){ perform action }
это то, как я это делаю, вы могли бы также выбросить еще что-нибудь с умирающим …
Если вы все равно хотите выполнить действие, если $result
недействителен:
if(!mysql_num_rows($result)) // Do stuff
Это будет содержать 0
и false
, возвращаемое mysql_num_rows()
при ошибке.
mysqli_fetch_array()
возвращает NULL
если строки нет.
В процедурном стиле:
if ( ! $row = mysqli_fetch_array( $result ) ) { ... no result ... } else { ... get the first result in $row ... }
В объектно-ориентированном стиле:
if ( ! $row = $result->fetch_array() ) { ... } else { ... get the first result in $row ... }
if (mysql_num_rows($result)!=0) { PERFORM ACTION }
Таким образом, вы проверяете и действуете, если результат положительный, (у вас есть запись в вашей БД, которая соответствует вашему запросу), в противном случае (== 0) вы выполнили действие, когда результат не был задан.
if (mysql_num_rows($result)>0) { PERFORM ACTION } if ($result) { PERFORM ACTION }