2016-12-17 143 views
0

我知道這是基本問題,但由於缺乏知識,我想知道如何將mysqli_result轉換爲數組和結果。Mysqli結果foreach結果集轉換爲數組

這裏是數據庫:

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

這是我使用的PHP類RTmysqli

用法:

$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"; 
    } 
} 

希望它能幫助。 :)