MySQL результаты отображает ноль - PullRequest
1 голос
/ 10 августа 2010

Я пытаюсь использовать mysqli для отображения данных, но ничего не отображается.

что не так с моим кодом?

php класс:

/* 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();



        }

он читает оператор if(!$query->num_rows==0), и в результирующем наборе есть данные, поскольку он не переходит к другой части, но я не могу понять, почему он ничего не отображает.

php файл:

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';
        }

1 Ответ

0 голосов
/ 10 августа 2010

! имеет более высокий приоритет , чем ==, т.е.

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();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...