PHP连接MySQL失败可能因配置错误、服务未运行或扩展未启用;需依次确认服务与扩展状态、选择mysqli(面向过程/对象)或PDO方式连接,并验证查询。

如果您尝试在PHP应用程序中连接MySQL数据库,但连接失败,则可能是由于数据库配置信息错误、MySQL服务未运行或PHP扩展未启用。以下是实现PHP连接MySQL数据库的具体步骤:
一、确认MySQL服务与PHP扩展状态
在执行连接前,需确保MySQL服务器正在运行,并且PHP已启用mysqli或pdo_mysql扩展。这两个扩展是PHP连接MySQL的必要组件,缺少任一将导致连接函数不可用。
1、打开终端或命令行工具,执行 sudo systemctl status mysql(Linux)或检查Windows服务中MySQL是否正在运行。
2、创建一个PHP文件,写入 php phpinfo(); ?>,在浏览器中访问该文件,搜索“mysqli”和“pdo_mysql”,确认其状态为“enabled”。
立即学习“PHP免费学习笔记(深入)”;
3、若未启用,编辑php.ini文件,取消以下两行的注释(删除分号):extension=mysqli 和 extension=pdo_mysql,然后重启Web服务器。
二、使用mysqli面向过程方式连接
mysqli扩展提供面向过程和面向对象两种接口,面向过程方式语法简洁,适合快速验证连接是否可行,适用于脚本调试或简单应用。
1、在PHP文件中定义数据库连接参数:$host = 'localhost'; $username = 'root'; $password = ''; $database = 'testdb';
2、调用 mysqli_connect() 函数并传入参数:$conn = mysqli_connect($host, $username, $password, $database);
3、使用 mysqli_connect_error() 检查连接结果:if (!$conn) { die('连接失败:' . mysqli_connect_error()); }
三、使用mysqli面向对象方式连接
面向对象方式将连接封装为mysqli类实例,支持方法链式调用和更清晰的错误处理结构,适用于中等复杂度项目。
1、使用new关键字初始化mysqli对象:$conn = new mysqli($host, $username, $password, $database);
citySHOP是一款集CMS、网店、商品、分类信息、论坛等为一体的城市多用户商城系统,已完美整合目前流行的Discuz! 6.0论坛,采用最新的5.0版PHP+MYSQL技术。面向对象的数据库连接机制,缓存及80%静态化处理,使它能最大程度减轻服务器负担,为您节约建设成本。多级店铺区分及联盟商户地图标注,实体店与虚拟完美结合。个性化的店铺系统,会员后台一体化管理。后台登陆初始网站密匙:LOVES
2、检查对象的connect_error属性:if ($conn->connect_error) { die('连接失败:' . $conn->connect_error); }
3、连接成功后可直接调用对象方法,例如 $conn->query("SELECT 1") 验证查询能力。
四、使用PDO方式连接
PDO(PHP Data Objects)是数据库访问抽象层,支持多种数据库驱动,具备预处理语句和异常处理机制,适合需要数据库可移植性或安全要求较高的场景。
1、定义DSN(数据源名称),格式为 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
2、调用PDO构造函数,传入DSN、用户名、密码及选项数组:$pdo = new PDO($dsn, $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
3、若连接出错,PDO会抛出PDOException异常,可通过try-catch捕获:catch (PDOException $e) { die('连接失败:' . $e->getMessage()); }
五、验证连接并执行基础查询
连接建立后必须通过实际查询验证数据库通信是否正常,避免仅依赖连接函数返回值而忽略后续权限或网络问题。
1、对于mysqli连接,执行 $result = mysqli_query($conn, "SELECT VERSION() AS ver");
2、获取查询结果:$row = mysqli_fetch_assoc($result); echo 'MySQL版本:' . $row['ver'];
3、对于PDO连接,使用prepare+execute方式:$stmt = $pdo->prepare("SELECT VERSION() AS ver"); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_ASSOC);










