在PHP中连接数据库通常使用PDO(推荐)或MySQLi扩展。以下是详细步骤和示例代码:
1. 使用 PDO 连接数据库(推荐)
PDO(PHP Data Objects)支持多种数据库(MySQL、PostgreSQL、SQLite等),并提供预处理语句防止SQL注入。
基本连接示例
php
$host = 'localhost'; // 数据库主机$dbname = 'test_db'; // 数据库名$username = 'root'; // 用户名$password = 'password'; // 密码$charset = 'utf8mb4'; // 字符集try { // 创建DSN(数据源名称) $dsn = "mysql:host=$host;dbname=$dbname;charset=$charset"; // 配置PDO选项 $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 错误模式:抛出异常 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认获取模式:关联数组 PDO::ATTR_EMULATE_PREPARES => false, // 禁用预处理模拟(防SQL注入) ]; // 创建PDO实例(连接数据库) $pdo = new PDO($dsn, $username, $password, $options); echo "数据库连接成功!";} catch (PDOException $e) { die("数据库连接失败: " . $e->getMessage());}?>
执行查询(SELECT)
php
$stmt = $pdo->query("SELECT * FROM users");while ($row = $stmt->fetch()) { echo $row['
'] . "
";}
预处理语句(防SQL注入)
php
// 插入数据$stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (:username, :email)");$stmt->execute([ ':username' => 'john_doe', ':email' => 'john@example.com']);// 查询数据$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");$stmt->execute([1]);$user = $stmt->fetch();
2. 使用 MySQLi 连接数据库
MySQLi 是 PHP 专为 MySQL 设计的扩展,支持面向对象和过程化风格。
面向对象风格
php
$host = 'localhost';$username = 'root';$password = 'password';$dbname = 'test_db';// 创建连接$mysqli = new mysqli($host, $username, $password, $dbname);// 检查连接if ($mysqli->connect_error) { die("连接失败: " . $mysqli->connect_error);}echo "数据库连接成功!";// 执行查询$result = $mysqli->query("SELECT * FROM users");while ($row = $result->fetch_assoc()) { echo $row['username'] . "
";}// 关闭连接$mysqli->close();?>
预处理语句(防SQL注入)
php
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");$stmt->bind_param("ss", $username, $email); // "ss" 表示两个字符串参数$username = 'jane_doe';$email = 'jane@example.com';$stmt->execute();
3. 关键注意事项
- 安全性
- 始终使用预处理语句(PDO 或 MySQLi)防止 SQL 注入。
- 不要将数据库凭据硬编码在代码中,使用环境变量或配置文件(如)。
- .env
- php
- // 从环境变量读取(需安装 vlucas/phpdotenv)$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);$dotenv->load();$dbPassword = $_ENV['DB_PASSWORD'];
- 错误处理
- 在生产环境中关闭错误显示,记录到日志文件:
- php
- ini_set('display_errors', 0);ini_set('log_errors', 1);
- 连接池与性能
- 频繁操作数据库时,复用连接对象(不要每次请求都新建连接)。
- 使用持久连接(谨慎):
- php
- $pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_PERSISTENT => true]);
- 字符集
- 确保连接时设置正确的字符集(如支持 Emoji)。
- utf8mb4
4. 常见错误排查
- 连接失败:检查主机名、用户名、密码、数据库名是否正确,确认MySQL服务已启动。
- 权限问题:确保数据库用户有权限访问目标数据库。
- 驱动未安装:如果报错,需在 `
- Class 'PDO' not found
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.