如何使用 PHP 连接 MySQL 数据库?

06-02 1608阅读

以下是使用PHP连接MySQL数据库的详细指南,涵盖多种方法、错误处理及最佳实践,供不同需求的开发者参考:

一、连接MySQL的常见方法

PHP支持多种方式连接MySQL数据库,主要推荐使用 MySQLi扩展(面向MySQL优化)和 PDO扩展(支持多数据库)。以下分别介绍具体实现:

1. 使用MySQLi扩展

MySQLi支持面向过程和面向对象两种编程风格,且兼容MySQL最新特性(如预处理语句)。

1.1 面向过程方式
 

关键点:

  • mysqli_connect() 参数依次为服务器地址、用户名、密码、数据库名(可选)。
  • mysqli_connect_error() 返回详细的连接错误信息。
    1.2 面向对象方式
     
    

    优势:

    • 更符合现代面向对象编程习惯。
    • 支持事务处理、预处理等高级功能。
      2. 使用PDO扩展

      PDO(PHP Data Objects)提供统一的接口支持多种数据库(如MySQL、PostgreSQL),适合需要跨数据库兼容性的项目。

       
      

      关键点:

      • 连接字符串格式:mysql:host=主机名;dbname=数据库名。
      • setAttribute() 设置错误处理模式,推荐使用异常机制提高代码健壮性。

        二、错误处理与调试

        连接失败可能由多种原因引起,需针对性处理:

        1. 常见错误原因
        • MySQL服务未启动
        • 用户名/密码错误
        • 权限不足(如远程连接未授权)
        • PHP未启用MySQL扩展
          2. 错误捕获方法

          MySQLi:通过返回值检查或异常捕获:

          if (!$conn) {
              die("错误代码: " . mysqli_connect_errno() . ",详细信息: " . mysqli_connect_error());
          }
          

          PDO:通过try-catch捕获异常:

          try {
              // 连接代码
          } catch (PDOException $e) {
              echo "错误信息: " . $e->getMessage();
          }
          
          3. 环境检查
          • 检查扩展是否启用:在PHP文件中运行phpinfo(),查看是否存在mysqli或pdo_mysql模块。
          • 修改php.ini:取消注释extension=mysqli和extension=pdo_mysql,重启Web服务。

            三、安全与最佳实践

            1:避免使用已弃用的mysql扩展

            PHP 7+已移除mysql_connect(),需使用MySQLi或PDO。

            2:使用预处理语句防止SQL注入

            示例(MySQLi预处理):

            $stmt = $conn->prepare("SELECT * FROM users WHERE email = ?");
            $stmt->bind_param("s", $email);
            $stmt->execute();
            

            3:敏感信息保护

            将数据库凭据存储在独立配置文件中,并设置文件权限禁止外部访问。

            4:连接池与持久连接

            高并发场景可使用连接池(如Swoole)或PDO持久连接(new PDO(..., [PDO::ATTR_PERSISTENT => true]))优化性能。

            四、进阶操作示例

            1. 执行查询(MySQLi面向对象)
            $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"]. "
            "; } } else { echo "0 结果"; }
            2. 事务处理(PDO)
            try {
                $conn->beginTransaction();
                // 执行多条SQL
                $conn->exec("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1");
                $conn->exec("UPDATE accounts SET balance = balance + 100 WHERE user_id = 2");
                $conn->commit();
            } catch (Exception $e) {
                $conn->rollBack();
                echo "事务失败: " . $e->getMessage();
            }
            

            五、总结

            方法适用场景优势
            MySQLi纯MySQL项目、需使用MySQL特性高性能、支持预处理和事务
            PDO多数据库支持、强调代码可移植性统一接口、强大的错误处理机制

            推荐选择:

            • 新手或小型项目:从MySQLi面向过程入手,简单直接。
            • 中大型或跨数据库项目:优先使用PDO,提升安全性和扩展性。

              通过合理选择连接方式、严格错误处理、遵循安全规范,可构建高效稳定的PHP数据库应用。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码