2016-12-17 6 views
0

これは基本的な質問ですが、知識が不足しているため、mysqli_resultを配列に変換して結果を取得した方法を知りたいと思います。ここでMysqliは結果セットを配列に変換しました

は、データベースである:ここでは

CREATE TABLE IF NOT EXISTS `slider` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

INSERT INTO `slider` (`id`, `title`) VALUES 
(1, 'Slider 1'), 
(2, 'Slider 2'), 
(3, 'Slider 3'), 
(4, 'Slider 4'), 
(5, 'Slider 5'), 
(6, 'Slider 6'), 
(7, 'Slider 7'), 
(8, 'Slider 8'); 

は、PHPファイルです:

$mysqli = new mysqli('host', 'user', 'pass', 'db',port); 

if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
      . $mysqli->connect_error); 
} 

$query = "SELECT * FROM slider ORDER BY id"; 
if ($result = $mysqli->query($query)) { 
    echo "<pre>"; print_r($result); //This is mysqli_result Object 

    foreach($result as $row) { //Here is the magic how it is converted and row is retrieved 
     //echo "<pre>"; print_r($row); 
     printf ("<br>%s (%s)\n", $row["id"], $row["title"]); 
    } 

    while ($row = $result->fetch_assoc()) { //Normal way 
     //echo "<pre>"; print_r($row); 
     printf ("<br>%s (%s)\n", $row["id"], $row["title"]); 
    } 

    $result->free(); 
} 

我々はしばらくを横断するとき、我々はFETCH_ *メソッドを使用して結果を取得しなければならないのが、私が通過横断したときにforeach、結果の取得方法は?どのように暗黙のうちに、foreachループはfetch_ *を呼び出していますか?

+0

これは 'Traversable'インターフェースを実装しているクラスなので、' foreach() 'を使うと自動的にフェッチします。 – Barmar

+0

興味深いことに、私はそれを通過します。 – Kamal

答えて

0

この問題は実際には基本的ではなく、この動作はむしろ新しいものであり、確かにいくつかの魔法を使用しています。あなたはmanual page上で読むことができとして

は、mysqli_resultオブジェクトは、それが上で繰り返すことができるので、Traversable interfaceサポートしています。反復処理を行うと、内部でfetch()が呼び出されます。

したがって、変換されず、むしろ配列として偽装されます。

+0

あなたの答えをありがとう、私はそれをチェックします.. – Kamal

0

これは私がRTmysqliを使用しているPHPクラスです。

使用法:

$RTmysqli= new RTlib\RTphp\RTmysqli(); 
$RTmysqli->config(DB_HOST, DB_UNAME, DB_PWORD, DB_NAME); 

$result = $RTmysqli->query("SELECT * FROM slider ORDER BY id"); 

if (!empty($result)) { 
    foreach($result as $row) { 
     print "<br>" . $row["id"] . "(" . $row["title"] . ")\n"; 
    } 
} 

はそれがお役に立てば幸いです。 :)

関連する問題