i’m trying to use mysqli to display data, but it displays nothing.
what is wrong with my code?
php class:
/* the database object */
private $_db;
public function __construct($db=NULL)
{
if(is_object($db))
{
$this->_db = $db;
}
else
{
$this->_db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
}
}
public function displayQuotes()
{
$sql = "SELECT cQuotes, vAuthor, cArabic, vReference
FROM thquotes
ORDER BY RAND()
LIMIT 1;";
$query = $this->_db->prepare($sql);
$query->execute();
$query->store_result();
/* bind variables to prepared statement */
$query->bind_result($cQuotes, $vAuthor, $cArabic, $vReference);
if(!$query->num_rows==0)
{
while($row = $query->fetch())
{
//echo $this->formatQuotes($row);
$formatHTML = new formatHTML();
echo $formatHTML->formatQuotes($row);
}
}
else
{
echo "There are no Quotes!";
}
$query->free_result();
$query->close();
}
it does read the statement of if(!$query->num_rows==0) and data is there in the resultset since it does not go to the else part, but i cannot figure out why it isn’t displaying anything.
php file:
include "base.php";
include_once "inc/class.quotes-m.inc.php";
$quotes = new Quotes($db);
$quotes->displayQuotes();
php base.php:
include_once("inc/constants.inc.php");
error_reporting(E_ALL);
ini_set("display_errors", 1);
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if (!$db) {
echo 'db link fail';
}
! has a higher precedence than ==, i.e.
i.e.
$query->num_rowsis logically negated (involving an int->bool cast) then this boolean value is compared to0.But you want something like
You’re using a try { … } catch() block. But the mysqli extension doesn’t throw exceptions (IIRC). Unless
$this->_dbis some kind of (additional) wrapper you have to test the return values of the mysqli methods, or use an api that actually throws an exception when an error occurs like e.g. PDO (when setting the error mode to PDO::ERRMODE_EXCEPTION).