php实现查询
PHP 实现数据库查询
PHP 中实现数据库查询通常使用 PDO(PHP Data Objects)或 MySQLi 扩展。以下分别介绍两种方法的实现方式。
使用 PDO 进行查询
PDO 提供了一个数据访问抽象层,支持多种数据库。
<?php
$host = 'localhost';
$db = 'database_name';
$user = 'username';
$pass = 'password';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch()) {
echo $row['name'] . "\n";
}
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
?>
使用 MySQLi 进行查询
MySQLi 是专门为 MySQL 设计的扩展。

<?php
$host = 'localhost';
$user = 'username';
$pass = 'password';
$db = 'database_name';
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
exit();
}
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
echo $row['name'] . "\n";
}
$mysqli->close();
?>
预处理语句防止 SQL 注入
预处理语句是防止 SQL 注入的最佳实践。
PDO 预处理
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$id]);
$user = $stmt->fetch();
MySQLi 预处理
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
处理查询结果
查询结果可以以不同方式获取:

// 获取所有结果
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 获取单行
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// 获取列
$count = $stmt->fetchColumn();
错误处理
良好的错误处理机制对数据库操作至关重要。
try {
// 数据库操作
} catch (PDOException $e) {
error_log($e->getMessage());
// 显示用户友好信息
}
连接管理
数据库连接应在脚本结束时关闭。
// PDO 不需要显式关闭
// MySQLi 需要关闭
$mysqli->close();
以上方法涵盖了 PHP 中实现数据库查询的基本操作,可根据具体需求选择适合的方式。






