Я ищу лучший способ проверить и видеть, были ли какие-либо результаты возвращены в запросе. Я чувствую, что пишу эту часть кода много, и иногда я получаю ошибки, и иногда я не делаю.
Например, я выполняю этот запрос, чтобы проверить, существует ли имя пользователя прежде, чем вставить новое в базу данных.
$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 }
Для PHP 5 и 7 и выше использования mysqli:
if (mysqli_num_rows($result)==0) { PERFORM ACTION }
Это получает мой голос.
OP, принимающий запрос, не возвращает ошибки, таким образом, это должно быть одним из пути
Что более логично затем тестирование ТИПА переменной результата перед обработкой? Это - или типа 'булевская переменная' или 'ресурса'. При использовании булевской переменной для параметра с 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);
}
$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 ...
}
$connect = new mysqli('localhost', 'user', 'password', 'db');
$result = $connect->query("select * from ...");
$count=$result->num_rows;
if(empty($count)){
echo"Query returned nothing";
}
else{
echo"query returned results";
}
if (mysql_num_rows($result)!=0) { PERFORM ACTION }
Этот способ, которым Вы проверяете и действуете, если результат положителен, (у Вас есть запись в Вашем DB, который соответствует Вашему запросу), другой путь (== 0) Вы выполнили действие, когда никакой результат не был дан.
Каждый раз, когда мы делаем запросы для получения некоторых данных, они возвращаются как объект. Затем большинство из нас преобразовывает его для выстраивания для цикличного выполнения через строки легко. В php, "пустом ()", функция используется, чтобы проверить, пуст ли массив т.е. если это не имеет никаких данных в нем. Таким образом, мы можем проверить, не ли представление возвращенного массива запроса пусто путем выполнения как это
if(!empty($result)){
//DO STUFF
}
Один способ сделать это состоит в том, чтобы проверить что 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
и регистрируя ошибку где-нибудь.
Из всех опций выше я использовал бы
if (mysql_num_rows($result)==0) { PERFORM ACTION }
проверка по сравнению с результатом как ниже
if (!$result) { PERFORM ACTION }
, Это будет верно, если mysql_error произойдет так эффективно, если бы ошибка произошла, то Вы могли бы затем ввести дублирующееся имя пользователя...
Используйте тот с mysql_fetch_row
, потому что "Для ВЫБОРА, ПОКАЖИТЕ, ОПИШИТЕ, ОБЪЯСНИТЕ и другие операторы, возвратив набор результатов, mysql_query () возвращает ресурс на успехе или ЛОЖЬ на ошибке.
Для другого типа SQL-операторов, ВСТАВЬТЕ, ОБНОВИТЕ, УДАЛИТЕ, ОТБРОСЬТЕ, и т.д., mysql_query () возвращает TRUE на успехе или ЛОЖЬ на ошибке".
Обычно я использую ===
( тройной, равняется ), и __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;
}
}
if (mysql_num_rows($result)>0) { PERFORM ACTION }
if ($result) { PERFORM ACTION }