7

PHP のビルトイン MySQLi クラスの機能を活用するクラスを作成しました。これは、データベースのやり取りを簡素化することを目的としています。ただし、OOP アプローチを使用すると、クエリの実行後に num_rows インスタンス変数が正しい行数を返すのに苦労しています。私のクラスのスナップショットを見てください...

class Database {
//Connect to the database, all goes well ...

//Run a basic query on the database
  public function query($query) {
  //Run a query on the database an make sure is executed successfully
    try {
    //$this->connection->query uses MySQLi's built-in query method, not this one
      if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) {
        return $result;
      } else {
        $error = debug_backtrace();

        throw new Exception(/* A long error message is thrown here */);
      }
    } catch (Exception $e) {
      $this->connection->close();

      die($e->getMessage());
    }
  }

//More methods, nothing of interest ...
}

使用例を次に示します。

$db = new Database();
$result = $db->query("SELECT * FROM `pages`"); //Contains at least one entry
echo $result->num_rows; //Returns "0"
exit;

なぜこれは正確ではないのですか?「field_count」など、結果オブジェクトのその他の値は正確です。どんな助けでも大歓迎です。

お時間をいただきありがとうございます。

4

3 に答える 3

5

考えられるバグ:http ://www.php.net/manual/en/mysqli-result.num-rows.php#104630

コードは上記のソースからのものです(Johan Abildskov):

$sql = "valid select statement that yields results"; 
if($result = mysqli-connection->query($sql, MYSQLI_USE_RESULT)) 
{ 
          echo $result->num_rows; //zero 
          while($row = $result->fetch_row()) 
        { 
          echo $result->num_rows; //incrementing by one each time 
        } 
          echo $result->num_rows; // Finally the total count 
}

手続き型スタイルで検証することもできます。

/* determine number of rows result set */
$row_cnt = mysqli_num_rows($result);
于 2011-06-30T18:00:15.643 に答える
1

MYSQLI_USE_RESULTで結果行のバッファリングを無効にすると、これは正常な動作になる可能性があります。

バッファを無効にするということは、行のフェッチ、保存、およびCOUNTはユーザー次第であることを意味します。デフォルトのフラグを使用する必要があります

$this->connection->query($query, MYSQLI_STORE_RESULT); 

相当する

$this->connection->query($query)
于 2012-11-23T09:45:10.310 に答える