Я пробовал то, что казалось самым интуитивным подходом
$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' AND password = '$_CLEAN[password]'"; $result = mysql_query($query); if ($result) { ...
но это не сработало, потому что mysql_query
возвращает истинное значение, даже если возвращается 0 строк. Я в основном хочу выполнить логику в этом условии, только если строка возвращается.
Использовать mysql_num_rows :
if (mysql_num_rows($result)) { //do stuff }
Если вы проверяете ровно одну строку:
if ($Row = mysql_fetch_object($result)) { // do stuff }
mysql_fetch_array()
этого вы можете использовать mysql_fetch_array()
или что-то еще, но принцип тот же. Если вы ожидаете 1 или более строк:
while ($Row = mysql_fetch_object($result)) { // do stuff }
Это будет зацикливаться до тех пор, пока не закончится ряд строк, после чего оно будет продолжено.
mysql_num_rows
Извлекает количество строк из набора результатов. Эта команда действительна только для таких операторов, как SELECT или SHOW, которые возвращают фактический набор результатов.
Если они не совпадают, то нуль будет возвратным значением и фактически FALSE
.
$result = mysql_query($query); if(mysql_num_rows($result)) { //-- non-empty rows found fitting your SQL query while($row = mysql_fetch_array($result)) {//-- loop through the rows, //-- each time resetting an array, $row, with the values } }
Что все хорошо и хорошо, если вы только выходите из базы данных. Если вы меняете или удаляете строки из базы данных и хотите знать, сколько из них было затронуто …
Чтобы получить количество строк, на которые влияет запрос INSERT, UPDATE, REPLACE или DELETE, используйте
mysql_affected_rows()
.
$result = mysql_query($query); if(mysql_affected_rows()) { //-- database has been changed } //-- if you want to know how many rows were affected: echo 'Rows affected by last SQL query: ' .mysql_affected_rows();
mysql_query()
вернет FALSE
если запрос mysql_query()
неудачно. Он вернет TRUE
даже если у вас нет строк, но успешно запросил базу данных.
$sql = "SELECT columns FROM table"; $results = mysql_query($sql, $conn); $nResults = mysql_num_rows($results); if ($nResults > 0) { //Hurray } else { //Nah }
Это должно сработать.
Я использовал следующее:
if ($ result! = 0 && mysql_num_rows ($ result)) {
Если запрос ничего не возвращает, он будет логическим результатом и будет равен 0.
Поэтому вы проверяете, является ли это ноль или нет, а если нет, мы знаем, что там что-то есть.
ОДНАКО, иногда он возвращает 1, даже если там ничего нет, поэтому вы ТОГДА проверяете, есть ли какие-либо строки, и есть ли там полная строка, вы точно знаете, что результат был возвращен.
Как насчет этого пути:
$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' AND password = '$_CLEAN[password]'"; $result = mysql_query($query); $result = mysql_fetch_array($result); //you could then define your variables like: $username = $result['username']; $password = $result['password']; if ($result) { ...
Мне это нравится, потому что я получаю очень специфические результаты, полученные из mysql_query.
-Иван Новак
Что ж…
by definiton mysql_query:
mysql_query () возвращает ресурс с успехом, или FALSE при ошибке.
но то, что вам нужно понять, – это если эта функция возвращает значение, отличное от FALSE, запрос был запущен без проблем (правильный синтаксис, подключение еще живое и т. д.), но это не означает, что запрос возвращает некоторую строку.
например
<?php $result = mysql_query("SELECT * FROM a WHERE 1 = 0"); print_r($result); // => true ?>
поэтому, если вы получите ЛОЖЬ, вы можете использовать
mysql_errorno()
и mysql_error()
чтобы узнать, что произошло.
следующим образом:
вы можете использовать mysql_fetch_array () для получения строки за строкой из запроса
$result = mysql_query(...); if(false !== $result) { //... }