MySQL PHP
用 PDO 在 PHP 里操作 MySQL,预处理防注入。
Key PointsPDO 是 PHP 操作 MySQL 的标准方式,预处理语句默认防注入。
连接与查询
PHP
<?php
$dsn = 'mysql:host=127.0.0.1;dbname=shop;charset=utf8mb4';
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
$stmt = $pdo->prepare('SELECT id, username FROM users WHERE age > ?');
$stmt->execute([25]);
foreach ($stmt as $row) {
echo $row['username'] . PHP_EOL;
}Output
alice
bob写入与事务
PHP
$pdo->beginTransaction();
$pdo->prepare('UPDATE accounts SET balance = balance - ? WHERE id = ?')
->execute([100, 1]);
$pdo->prepare('UPDATE accounts SET balance = balance + ? WHERE id = ?')
->execute([100, 2]);
$pdo->commit();Older code uses
mysqli, but PDO is database-agnostic, uniform and easier to prepare. Always set charset=utf8mb4 and ERRMODE_EXCEPTION.连接与查询
PHP
<?php
$dsn = 'mysql:host=127.0.0.1;dbname=shop;charset=utf8mb4';
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
$stmt = $pdo->prepare('SELECT id, username FROM users WHERE age > ?');
$stmt->execute([25]);
foreach ($stmt as $row) {
echo $row['username'] . PHP_EOL;
}Output
alice
bob写入与事务
PHP
$pdo->beginTransaction();
$pdo->prepare('UPDATE accounts SET balance = balance - ? WHERE id = ?')
->execute([100, 1]);
$pdo->prepare('UPDATE accounts SET balance = balance + ? WHERE id = ?')
->execute([100, 2]);
$pdo->commit();PHP 早期用
mysqli,但 PDO 支持多数据库、接口统一,且预处理更顺手,推荐 PDO。务必 charset=utf8mb4,并开 ERRMODE_EXCEPTION 让错误显性抛出。