! имеет более высокий приоритет , чем ==, т.е.
if(!$query->num_rows==0) { ... }
// is equivalent to
if( (!$query->num_rows) == 0 ) { ... }
т.е. $query->num_rows
логически отрицается (включая int-> bool cast), тогда это логическое значение сравнивается с 0
.
Но вы хотите что-то вроде
if( 0 < $query->num_rows ) { ... }
Вы используете блок try {...} catch (). Но расширение mysqli не создает исключений (IIRC). Если $this->_db
не является какой-то (дополнительной) оболочкой, вам нужно проверить возвращаемые значения методов mysqli или использовать API, который фактически выдает исключение, когда возникает ошибка, например PDO (при установке режима ошибки на PDO :: ERRMODE_EXCEPTION).
public function displayQuotes()
{
$sql = "
SELECT cQuotes, vAuthor, cArabic, vReference
FROM thquotes
ORDER BY RAND()
LIMIT 1
";
$query = $this->_db->prepare($sql);
if ( !$query ) {
throw new ErrorException($this->_db->error, $this->_db->errno);
}
$r = $query->execute();
if ( !$r ) {
throw new ErrorException($query->error, $query->errno);
}
$r = $query->store_result();
if ( !$r ) {
throw new ErrorException($query->error, $query->errno);
}
/* bind variables to prepared statement */
$r = $query->bind_result($cQuotes, $vAuthor, $cArabic, $vReference);
if ( !$r ) {
throw new ErrorException($query->error, $query->errno);
}
if( 0 < $query->num_rows ) {
$formatHTML = new formatHTML();
while( false!==($row=$query->fetch()) ) {
echo $formatHTML->formatQuotes($row);
}
}
else {
echo "There are no Quotes!";
}
$query->free_result();
$query->close();
}