我知道这是基本问题,但由于缺乏知识,我想知道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();
}
当我们遍历时,我们必须使用fetch_ *方法检索结果,但是当我遍历foreach时,如何检索结果? foreach循环是多么隐含地调用fetch _ *?
答案 0 :(得分:0)
这个问题实际上并不是那么基本,因为这种行为相当新,而且它确实采用了一些魔法。
作为,您可以阅读manual page ,mysqli_result对象支持Traversable
interface,因此可以通过进行迭代。迭代时,它在内部调用fetch()
。
所以它没有被转换,而是伪装成数组。
答案 1 :(得分: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";
}
}
希望它有所帮助。 :)