2016-12-17 77 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"; 
    } 
} 

希望它能帮助。 :)