Лучший способ проверить, вернулись ли результаты 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 }
Каков наилучший способ сделать это?
Ответы
Ответ 1
if (mysql_num_rows($result)==0) { PERFORM ACTION }
Для PHP 5 и 7 и выше используйте mysqli:
if (mysqli_num_rows($result)==0) { PERFORM ACTION }
Это получает мой голос.
OP предполагает, что запрос не возвращает никакой ошибки, так что это должно быть одним из способов
Ответ 2
Один из способов сделать это - проверить, что возвращает 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
и регистрируя ошибку где-нибудь.
Ответ 3
Всякий раз, когда мы выполняем запросы для получения некоторых данных, он возвращается как объект. Затем большинство из нас преобразует его в массив, чтобы легко перебирать строки. В php "empty()" функция используется, чтобы проверить, пуст ли массив, т.е. Если в нем нет данных. Таким образом, мы можем проверить, не возвращает ли возвращенное представление массива запроса пустое, делая это
if(!empty($result)){
//DO STUFF
}
Ответ 4
Что более логично, чем тестировать ТИП переменной результата перед обработкой?
Это либо тип "boolean", либо "resource". Когда вы используете логический параметр для параметра с 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);
}
Ответ 5
Из всех вышеперечисленных вариантов я бы использовал
if (mysql_num_rows($result)==0) { PERFORM ACTION }
проверка на результат, как показано ниже
if (!$result) { PERFORM ACTION }
Это будет верно, если mysql_error будет так эффективно, если возникнет ошибка, вы можете ввести двойное имя пользователя...
Ответ 6
Используйте один с mysql_fetch_row
, потому что "Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query() возвращает ресурс с успехом или FALSE при ошибке.
Для других типов операторов SQL INSERT, UPDATE, DELETE, DROP и т.д. mysql_query() возвращает TRUE при успешном завершении или FALSE при ошибке. "
Ответ 7
Обычно я использую ===
(тройной эквивалент) и __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;
}
}
Ответ 8
$result = $mysqli->query($query);
if($result){
perform action
}
вот как я это делаю, вы могли бы также выбросить еще что-нибудь с умирающим...
Ответ 9
Если вы все равно хотите выполнить действие, если значение $result
недействительно:
if(!mysql_num_rows($result))
// Do stuff
Это будет учитывать 0
и false
, которые возвращаются mysql_num_rows()
при ошибке.
Ответ 10
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 ...
}
Ответ 11
$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";
}
Ответ 12
if (mysql_num_rows($result)!=0) { PERFORM ACTION }
Таким образом, вы проверяете и действуете, если результат положительный, (у вас есть запись в вашей БД, которая соответствует вашему запросу), в противном случае (== 0) вы выполнили действие, когда результат не был задан.
Ответ 13
if (mysql_num_rows($result)>0) { PERFORM ACTION }
if ($result) { PERFORM ACTION }