Лучший способ проверить, возвращаются ли результаты MySQL в PHP?
Я ищу лучший способ проверить и посмотреть, если какие-то результаты были возвращены в запросе. Я чувствую, что я пишу эту часть кода много, и иногда я получаю ошибки, а иногда и нет.
например, я запускаю этот запрос, чтобы проверить, существует ли имя пользователя перед вставкой нового в базу данных.
$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 }
каков наилучший способ сделать это?
12 ответов:
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и протоколирование ошибки где-то.
всякий раз, когда мы делаем запросы, чтобы получить некоторые данные, он возвращается как объект. Затем большинство из нас преобразует его в массив для циклического перебора строк легко. В php функция "empty ()" используется для проверки пустоты массива, т. е. если в нем нет данных. Поэтому мы можем проверить, не является ли возвращенное представление массива запроса пустым, выполнив это
if(!empty($result)){ //DO STUFF }
что более логично, чем тестирование типа переменной результата перед обработкой? Это либо типа 'логическое' или 'ресурс'. Когда вы используете логический параметр for с mysqli_num_rows, предупреждение будет сгенерировано, потому что функция ожидает ресурс.
$result = mysqli_query($dbs, $sql); if(gettype($result)=='boolean'){ // test for boolean if($result){ // returned TRUE, e.g. 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 и других операторов, возвращающих resultset, 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; } }
$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) вы выполнили действие, когда результат не был дан.
Comments