PHP MySQL 读取数据
1. 从 MySQL 数据库中读取数据
在 SQL 中,SELECT 命令主要用于从数据库的表中选取数据。
如果您想要从表中提取特定的列,可以使用如下的 SQL 语法:
SELECT column1, column2, column3 FROM table_name如果您想要选取数据表中的所有列,请使用 * 字符:
SELECT * FROM table_name2. 使用 MySQLi 读取数据
以下实例演示了如何从 "MyGuests" 表中选取 id、firstname 和 lastname 列,并将其结果输出展示在网页上:
2.1 MySQLi 面向对象 (Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
// 执行 SQL 查询
$result = $conn->query($sql);
// 处理结果集
if ($result->num_rows > 0) {
// 遍历并输出每行数据
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
$conn->close();
?>2.2 核心代码解析
上面的代码在执行读取时完成了以下核心操作:
首先,我们设置了一个查询数据库的 SQL 语句,指令从 MyGuests 表中选择 id、firstname 和 lastname。代码的下一行 $result = $conn->query($sql); 负责向数据库发送并执行该查询,并将返回的数据结构分配给 $result 变量。
接下来,通过 $result->num_rows 函数来检查数据表是否返回了任何行。如果返回的数据行数大于 0,说明成功读取到了记录,接着使用 while 循环遍历所有的记录。
在循环体中,fetch_assoc() 函数将当前结果集转换为一个关联数组,并赋给 $row 变量。随后便可以通过对应的列名直接访问和输出数组项。如果没有查找到任何记录,程序则会直接输出 "0 结果"。
2.3 MySQLi 面向过程 (Procedural)
与面向对象类似,以下是采用面向过程方式实现同样读取功能的方法:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// 遍历并输出每行数据
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
mysqli_close($conn);
?>3. 使用 PDO 读取数据
PDO(PHP Data Objects)是另一种极其常用且支持多数据库环境的连接方式。以下实例展示了如何使用 PDO 结合预处理语句来选取数据,并通过 HTML 表格进行渲染:
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 预处理 SQL 语句
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
$stmt->execute();
// 将提取模式设置为关联数组
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>