2013-04-18 2 views
3

У меня есть страница php с кодом ниже. Запрос MySQL работает правильно, но я попытался добавить инструкцию IF, которая не работает. Оператор if(!isset($result)) должен улавливать ситуации, когда таблица содержит только значения даты и времени FUTURE. Я, очевидно, не использую его правильно, или я должен использовать что-то еще - например, if(empty())?Как изменить инструкцию! Isset

<?php 

include 'quantitytest_config.php'; 

//connection to the database 
$dbhandle = mysql_connect($hostname, $username, $password) 
    or die("Unable to connect to MySQL"); 

//select a database to work with 
$selected = mysql_select_db("grace59_countdown",$dbhandle) 
    or die("Could not select countdown"); 

//execute the SQL query and return records 
$result = mysql_query(
    "SELECT items 
    FROM cases 
    WHERE datetime<=NOW() 
    Limit 1 "); 

// check if there are only future dates in Database 
if(!isset($result)){ 
    echo "9999"; 
} else { 

//fetch tha data from the database 
while ($row = mysql_fetch_array($result)) { 
    echo "Quantity:".$row{'items'}."<br>"; 
} 
} 
//close the connection 
mysql_close($dbhandle); 
?> 
+4

Здесь идет обычный «не использовать устаревшие' расширение mysql' и использовать '' mysqli' или PDO' вместо»RANT. – brezanac

ответ

6

Вы ищете:

if(mysql_num_rows($result) == 0){ 
    echo "9999"; 
} else { 

Документация: http://www.php.net/manual/en/function.mysql-num-rows.php

Вы присвоить значение $ результат, когда вы говорите $result = mysql_query так, даже если ни одна строка не найдена, то переменная теперь установлена , так что isset() не поможет.

Но вы действительно не должны использовать функции mysql_ *. Посмотрите на подготовленные заявления. PDO или mysqli. Дальнейшее чтение можно найти здесь: http://www.php.net/manual/en/function.mysql-query.php (красная коробка)

+2

@BrandonWamboldt Спасибо за разъяснение! – jtheman

+1

+1 для ответа и фотографии профиля! – nickhar

+0

@nickhar Спасибо! : D – jtheman

1

Из documentation:

Исеть - Возвращает TRUE, если переменная существует и имеет значение, отличное от NULL, FALSE в противном случае.

Но $result будет действительным MySQL resouce - событием, если результатов запроса нет.

От docs:

Для SELECT, SHOW, DESCRIBE, EXPLAIN и другие заявления, возвращающиеся, mysql_query ResultSet() возвращает ресурс при успехе, FALSE при ошибке.

Для других типов операторов SQL, INSERT, UPDATE, DELETE, DROP и т. Д. Mysql_query() возвращает TRUE при успешном завершении или FALSE при ошибке.

Использование mysql_num_results() для обнаружения ли результирующий набор пуст или нет:

if(mysql_num_rows($result) == 0) { 
    echo 'no results'; 
} 

Дополнительная сведению, что вы не должны использовать mysql_ * функции для нового кода как расширение было отмечено deprectated разработчиками PHP. Используйте вместо этого PDO или mysqli.

0

Не забывайте, что mysql_query может вернуться false, так:

if($result){ 
    if(mysql_num_rows($result) == 0){ 
     echo "9999"; 
    } 
} 
Смежные вопросы