php实现查询
PHP 实现数据库查询
在 PHP 中实现数据库查询通常涉及连接数据库、执行 SQL 语句并处理结果。以下是几种常见的方法:
使用 MySQLi 扩展
MySQLi 是 PHP 提供的 MySQL 数据库扩展,支持面向对象和面向过程两种编程风格。
面向对象方式连接和查询
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
面向过程方式连接和查询
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
使用 PDO 扩展
PDO (PHP Data Objects) 提供了一个数据访问抽象层,可以用于多种数据库。
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, name FROM users");
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach($stmt->fetchAll() as $row) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
预处理语句防止 SQL 注入
使用预处理语句可以有效防止 SQL 注入攻击。
MySQLi 预处理
$stmt = $conn->prepare("SELECT id, name FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$id = 1;
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
PDO 预处理

$stmt = $conn->prepare("SELECT id, name FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$id = 1;
$stmt->execute();
while ($row = $stmt->fetch()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
使用 ORM 框架
对于大型项目,可以考虑使用 ORM (对象关系映射) 框架如 Laravel 的 Eloquent 或 Doctrine。
Eloquent 示例
$users = User::where('active', 1)
->orderBy('name')
->take(10)
->get();
foreach ($users as $user) {
echo $user->name;
}
查询结果处理
查询结果可以以多种方式处理:
获取关联数组
$row = $result->fetch_assoc(); // MySQLi
$row = $stmt->fetch(PDO::FETCH_ASSOC); // PDO
获取数字索引数组

$row = $result->fetch_row(); // MySQLi
$row = $stmt->fetch(PDO::FETCH_NUM); // PDO
获取对象
$row = $result->fetch_object(); // MySQLi
$row = $stmt->fetch(PDO::FETCH_OBJ); // PDO
错误处理
良好的错误处理机制对于数据库操作至关重要。
MySQLi 错误处理
if (!$result) {
echo "Error: " . $conn->error;
}
PDO 错误处理
try {
// PDO 操作
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
性能优化
对于大量数据查询,可以考虑以下优化方法:
- 使用索引优化查询
- 限制返回的字段数量
- 使用分页处理大数据集
- 考虑使用缓存机制
// 分页示例
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$sql = "SELECT * FROM users LIMIT $limit OFFSET $offset";
以上方法涵盖了 PHP 中实现数据库查询的主要技术和最佳实践,开发者可以根据项目需求选择合适的方式。






