mysqli结果foreach结果集转换为数组

Posted

技术标签:

【中文标题】mysqli结果foreach结果集转换为数组【英文标题】:Mysqli result foreach resultset converted to array 【发布时间】:2017-05-03 02:45:17 【问题描述】:

我知道这是基本问题,但由于缺乏知识,我想知道 mysqli_result 是如何转换为数组并检索到结果的。

这是数据库:

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

当我们遍历 while 时,我们确实必须使用 fetch_* 方法检索结果,但是当我遍历 foreach 时,如何检索结果? foreach 循环调用 fetch_* 的隐含程度如何?

【问题讨论】:

是一个实现Traversable接口的类,所以使用foreach()会自动获取。 有兴趣知道,我会通过它。 【参考方案1】:

这个问题实际上并不是那么基本,因为这种行为是相当新的,而且确实使用了一些魔法。

正如你可以阅读manual page,mysqli_result 对象支持Traversable interface,所以它可以被迭代。并且在迭代时,它在内部调用fetch()

所以它没有被转换,而是伪装成数组。

【讨论】:

【参考方案2】:

这是我正在使用的 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";
    

希望对您有所帮助。 :)

【讨论】:

以上是关于mysqli结果foreach结果集转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP MySQLi将结果集转换为HTML表

PHP MySQLi将结果集转换为CSV或JSON

MySQLi将结果集转换为CSV或JSON

如何将 MySQLi 结果集加载到二维数组中?

如何将结果集行作为索引子数组添加到结果数组中?

php中mysqli 处理查询结果集的几个方法