如何在PHP中连接MySQL数据库?使用mysqli或PDO建立连接

兄弟姐妹们在线说明下,如何在PHP中连接MySQL数据库?使用mysqli或PDO建立连接
最新回答
风中混乱工会

2026-06-01 18:05:58

在PHP中连接MySQL数据库,可通过mysqli或PDO实现,两者各有优势,选择取决于项目需求。以下是具体实现方法及注意事项:

一、使用mysqli连接MySQL

mysqli是专门为MySQL设计的扩展,提供面向对象和面向过程两种API风格。

1. 面向对象风格<?php$servername = "localhost";$username = "username";$password = "password";$database = "database_name";// 创建连接$conn = new mysqli($servername, $username, $password, $database);// 检测连接if ($conn->connect_error) { die("连接失败: " . $conn->connect_error);}echo "连接成功";// 执行查询$sql = "SELECT id, firstname, lastname FROM Users";$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. 面向过程风格<?php$servername = "localhost";$username = "username";$password = "password";$database = "database_name";// 创建连接$conn = mysqli_connect($servername, $username, $password, $database);// 检测连接if (!$conn) { die("连接失败: " . mysqli_connect_error());}echo "连接成功";// 执行查询$sql = "SELECT id, firstname, lastname FROM Users";$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);?>二、使用PDO连接MySQL

PDO提供统一的接口访问多种数据库,适合需要数据库迁移的场景。

<?php$servername = "localhost";$username = "username";$password = "password";$database = "database_name";try { $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功"; $sql = "SELECT id, firstname, lastname FROM Users"; $stmt = $conn->prepare($sql); $stmt->execute(); $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach($stmt->fetchAll() as $row) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; }} catch(PDOException $e) { echo "连接失败: " . $e->getMessage();}$conn = null;?>三、mysqli与PDO的选择建议
  • 选择mysqli:

    项目仅使用MySQL数据库。

    需要更高的性能(mysqli针对MySQL优化)。

    偏好面向对象或面向过程的API风格。

  • 选择PDO:

    项目可能切换到其他数据库(如PostgreSQL、SQLite)。

    需要统一的数据库访问接口。

    希望代码更具可移植性。

四、常见错误及排查方法
  1. 用户名或密码错误:

    检查数据库凭据是否正确。

  2. 数据库服务器地址错误:

    确认localhost或IP地址是否正确。

  3. 数据库不存在:

    确保数据库已创建。

  4. 权限问题:

    检查数据库用户是否有访问权限。

排查步骤:

  • 查看PHP错误信息。
  • 使用var_dump()或print_r()输出连接对象。
  • 检查MySQL错误日志。
五、防止SQL注入攻击
  1. 使用预处理语句:

    mysqli(面向对象):$stmt = $conn->prepare("SELECT id FROM Users WHERE firstname = ?");$stmt->bind_param("s", $firstname);$firstname = $_POST['firstname'];$stmt->execute();

    PDO:$stmt = $conn->prepare("SELECT id FROM Users WHERE firstname = :firstname");$stmt->bindParam(':firstname', $firstname);$firstname = $_POST['firstname'];$stmt->execute();

  2. 转义用户输入(不推荐,仅作为备选):

    mysqli:$firstname = mysqli_real_escape_string($conn, $_POST['firstname']);

    PDO:$firstname = $conn->quote($_POST['firstname']);

  3. 最小权限原则:

    数据库用户仅授予必要权限,避免使用root。

六、优化数据库连接性能
  1. 使用持久连接:

    mysqli:在php.ini中设置mysqli.allow_persistent = On。

    PDO:在DSN中添加persistent=true。

  2. 避免在循环中连接数据库:

    在循环外建立连接,循环内执行查询。

  3. 使用索引:

    为频繁查询的列创建索引。

  4. 优化SQL查询:

    使用EXPLAIN分析查询性能。

通过以上方法,可高效、安全地实现PHP与MySQL的连接,并根据项目需求选择合适的扩展。