MySQLi 的数据库使用(OOP)

MySQL 飞快学 315浏览

迭代读取数据

<?php
require_once 'db_config.php';

$mysqli = new mysqli($host, $user, $pass, $db);
$sql = "select * from film LIMIT 0 , 10";
$result= $mysqli->query($sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>Sakila 影片</title>
</head>
<body>
<table>
  <tr>
    <td>名称</td>
    <td>发布时间</td>
  </tr>
<?php while($row = $result->fetch_assoc()) : ?>  
  <tr> 
    <td><?php echo $row["title"];?></td>
    <td><?php echo $row["release_year"];?></td>
  </tr>  
<?php endwhile; ?>   
</table> 
</body>
</html>

使用获取对象的方式

<?php while($row = $result->fetch_object()) : ?>  
  <tr> 
    <td><?php echo $row->title; ?></td>
    <td><?php echo $row->release_year; ?></td>
  </tr>  
<?php endwhile; ?>   

使用 fetch_all 一次性获得所有数据

这种方式仅可用于 MySQL Native Driver。 如果系统是 Ubuntu,需要执行下面的命令来安装原生驱动。

sudo apt-get install php5-mysqlnd

否则,会出现下面的错误:

Fatal error: Call to undefined method mysqli_result::fetch_all() in /var/www/example.com/xxx.php on line 7

一次性获得所有数据较迭代方式要占用更多内存,适用于要将获得数据传入视图层。

<?php
require_once 'db_config.php';

$mysqli = new mysqli($host, $user, $pass, $db);
$sql = "select * from film LIMIT 0 , 10";
$result= $mysqli->query($sql);
$rows = $result->fetch_all(MYSQLI_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>Sakila 影片</title>
</head>
<body>
<table>
  <tr>
    <td>名称</td>
    <td>发布时间</td>
  </tr>
<?php foreach($rows as $row): ?>
  <tr> 
    <td><?= $row['title']; ?></td>
    <td><?= $row['release_year']; ?></td>
  </tr>  
<?php endforeach; ?>  
</table> 
</body>
</html>

参数可以是 MYSQLI_ASSOC、MYSQLI_NUM 或 MYSQLI_BOTH。