PHP如何用MySQL连接数据库,连接失败怎么办?

PHP怎么用MySQL连接数据库服务器的核心答案:先确认PHP已启用pdo_mysql或mysqli扩展,再拿到主机、端口、库名、用户名、密码,用PDO或mysqli创建连接,设置utf8mb4字符集并捕获异常,生产环境坚持最小权限和预处理语句。 只要这几步走通,本地、宝塔面板或云服务器上的连接问题都能逐层定位。

PHP怎么用MySQL连接数据库服务器:先理清连接参数

连接前需要准备的四类信息

  • 主机地址:本机常用0.0.1或localhost,云服务器常用内网IP,远程连接才用公网IP。
  • 端口:MySQL默认3306,如果改过端口,PHP连接时必须同步修改。
  • 库名与账号:不要拿root账号跑业务,单独建库、单独建用户更稳妥。
  • 字符集:推荐utf8mb4,兼容emoji和更多生僻字。

检查PHP扩展是否可用

在终端执行:

php连接mysql数据库一直失败? 90%错在这4个地方
加载中
php连接mysql数据库一直失败? 90%错在这4个地方
php -m | grep -i pdo
php -m | grep -i mysqli
php -m | grep -i pdo_mysql

Linux下安装扩展常用:

# Debian/Ubuntu
sudo apt install php-mysql
# CentOS/RHEL
sudo yum install php-mysqlnd

宝塔面板用户可以在“软件商店 – PHP – 安装扩展”里勾选pdo_mysql或mysqli,改完记得重启PHP-FPM。

先用MySQL命令行验证账号

PHP连不上时,先别急着改代码,用命令行测一次:

mysql -h 127.0.0.1 -P 3306 -u app_user -p app_db

如果这里提示拒绝、超时或密码错误,PHP端也会失败,据MySQL官方文档,默认端口是3306,账户权限由user和host共同决定,先把命令行跑通,再回到PHP。

用PDO连接MySQL的完整步骤

创建PDO连接

<?php
$host = '127.0.0.1';
$port = 3306;
$dbname = 'app_db';
$user = 'app_user';
$pass = 'your_password';
$dsn = "mysql:host={$host};port={$port};dbname={$dbname};charset=utf8mb4";
try {
    $pdo = new PDO($dsn, $user, $pass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,
    ]);
} catch (PDOException $e) {
    error_log('数据库连接失败:' . $e->getMessage());
    exit('数据库连接失败');
}

使用预处理执行查询

PHP如何用MySQL连接数据库,连接失败怎么办?

$stmt = $pdo->prepare('SELECT id, username FROM users WHERE email = :email'); $stmt->execute([':email' => $email]); $user = $stmt->fetch();

PDO::ATTR_EMULATE_PREPARES => false让MySQL执行真正的预处理,配合参数绑定能降低SQL注入风险,PDO还支持命名参数,代码可读性更好。

用mysqli连接MySQL的完整步骤

面向对象写法

<?php
$mysqli = new mysqli('127.0.0.1', 'app_user', 'your_password', 'app_db', 3306);
if ($mysqli->connect_errno) {
    error_log('连接失败:' . $mysqli->connect_error);
    exit('数据库连接失败');
}
$mysqli->set_charset('utf8mb4');
$stmt = $mysqli->prepare('SELECT id, username FROM users WHERE email = ?');
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();

mysqli只面向MySQL,它提供过程式和面向对象两套写法,老项目里过程式代码不少,新项目更推荐面向对象或PDO。

PHP连接MySQL用mysqli还是PDO好

对比项 mysqli PDO
支持数据库 仅MySQL 多种数据库
参数风格 问号占位 问号、命名参数
异常处理 可开启 更统一
预处理 支持 支持
适合场景 纯MySQL、旧项目 新项目、多数据库、规范化团队

行业共识认为,新项目优先选PDO更合适,若项目只连MySQL,并且团队熟悉mysqli,继续用mysqli也没有问题,关键不是扩展名字,而是是否用预处理、是否最小权限、是否处理异常。

国内云服务器PHP连接MySQL数据库失败怎么排查

第一层:网络与端口

  • 云服务器安全组是否放行3306,生产环境尽量只放行内网IP或固定出口IP,不要全开0.0.0/0。
  • 系统防火墙是否拦截,可检查firewalld、ufw或iptables。
  • 本地测试连通性:
telnet 127.0.0.1 3306
nc -vz 内网IP 3306

Windows可用:

Test-NetConnection 127.0.0.1 -Port 3306

第二层:MySQL用户权限

登录MySQL后检查:

PHP如何用MySQL连接数据库,连接失败怎么办?

SELECT user, host FROM mysql.user; SHOW GRANTS FOR 'app_user'@'%';

创建业务账号示例:

CREATE USER 'app_user'@'%' IDENTIFIED BY '强密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db. TO 'app_user'@'%';
FLUSH PRIVILEGES;

表示允许任意主机,风险较高,更安全的做法是限制为应用服务器的内网IP,业内专家指出,生产环境应避免root远程连接,业务账号只给必要权限。

第三层:PHP与MySQL版本兼容

MySQL 8默认认证插件是caching_sha2_password,旧版PHP或旧驱动可能不兼容,遇到“Authentication plugin cannot be loaded”时,可升级PHP版本,或让DBA调整用户认证方式,不要随意降级MySQL来迁就旧代码。

第四层:错误日志定位

  • PHP错误日志:查看/var/log/php-fpm/或宝塔面板日志。
  • MySQL错误日志:常见于/var/log/mysql/error.log。
  • PDO异常信息:打开ERRMODE_EXCEPTION后记录具体错误码。

连接超时多半是网络或安全组;连接拒绝多半是服务未启动或端口未监听;认证失败多半是账号、密码、host权限或认证插件。

宝塔面板PHP连接MySQL数据库配置教程

在面板创建数据库

进入“数据库 – 添加数据库”,填写数据库名、用户名、密码,访问权限按场景选择:本机应用选localhost,跨服务器连接再考虑指定IP或,添加后记录库名、用户名、密码和端口。

写入PHP配置文件

不要把密码写死在业务代码里,可以用.env文件或面板环境变量:

$host = getenv('DB_HOST') ?: '127.0.0.1';
$dbname = getenv('DB_NAME') ?: 'app_db';
$user = getenv('DB_USER') ?: 'app_user';
$pass = getenv('DB_PASS') ?: '';

宝塔的PHP扩展、MySQL版本、网站运行目录要互相对应,改完PHP版本后,pdo_mysql可能没装,回到扩展页面补装并重启。

常见坑位

  • localhost可能走Unix socket,0.0.1走TCP,两者行为不同。
  • 宝塔安全组和云厂商安全组是两层,只开一层不够。
  • MySQL 8用户权限变更后要FLUSH PRIVILEGES。
  • PHP-FPM重启后才加载新扩展。

PHP连接MySQL数据库需要额外付费吗

PHP本身免费,MySQL社区版也免费,费用通常来自服务器、云数据库、带宽、备份和运维,买云数据库时,价格随实例规格、存储、地域和计费方式变化,本地开发用XAMPP、phpStudy或Docker,基本零成本,虚拟主机通常已包含数据库,但连接数、容量和权限可能受限。

PHP如何用MySQL连接数据库,连接失败怎么办?

如果只是学习“php怎么用mysql连接数据库服务器”,本地环境足够,生产环境再根据访问量、数据量和预算选择自建MySQL或云数据库,自建省钱但运维责任重;云数据库省心但按配置付费,选择时重点看连接数、存储上限、备份能力和故障恢复。

生产环境安全与性能清单

  • 使用独立业务账号,禁止root直连。
  • 只授予必要权限,如SELECT、INSERT、UPDATE、DELETE。
  • 所有外部输入走预处理,不拼接SQL字符串。
  • 统一使用utf8mb4,避免乱码。
  • 数据库配置放环境变量,不提交到代码仓库。
  • 设置合理超时,避免请求堆积。
  • 持久连接要谨慎,PHP-FPM场景下可能带来连接占用。
  • 开启慢查询日志,定期检查索引。
  • 定期更新PHP和MySQL小版本,修复安全问题。

据PHP官方手册,PDO和mysqli都支持预处理语句,选哪个扩展不是最关键的,关键是把连接参数、字符集、异常处理和权限控制做扎实。

Q&A:PHP怎么用MySQL连接数据库服务器常见问题

PHP连接MySQL提示Connection refused怎么办?

先确认MySQL服务是否运行:systemctl status mysql或service mysql status,再检查端口监听:ss -lntp | grep 3306,如果本机可连、远程不可连,检查bind-address、云安全组和系统防火墙,若MySQL只监听0.0.1,远程连接会被拒绝。

PHP连接MySQL用mysqli还是PDO好?

只看MySQL且项目较旧,mysqli够用,需要多数据库支持、命名参数、统一异常处理,选PDO更合适,两者都支持预处理,新项目用PDO,维护成本通常更低。

PHP连接MySQL数据库需要额外付费吗?

PHP和MySQL社区版不收费,实际支出集中在云服务器、云数据库实例、带宽、存储、备份和运维,云数据库按规格和地域计费,具体以云厂商价格页为准,本地开发环境不需要为数据库软件本身付费。

PHP连接MySQL服务器并不复杂,难的是把网络、权限、扩展和代码规范同时做对,把PDO或mysqli连接跑通,再按最小权限和预处理原则落地,后续换服务器、上云或迁移数据库都会轻松很多。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/php%e5%a6%82%e4%bd%95%e7%94%a8mysql%e8%bf%9e%e6%8e%a5%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%8c%e8%bf%9e%e6%8e%a5%e5%a4%b1%e8%b4%a5%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%9f/

赞 (0)
Proxmox导出虚拟机后如何在新环境导入运行?,怎么迁移
上一篇 2026年10月14日 04:03
用MySQL怎么做数据库服务器配置,服务器配置要注意什么?
下一篇 2026年10月14日 04:03

相关推荐

  • 租GPU服务器为何先懂费用构成?,GPU服务器费用怎么算?

    租GPU服务器的费用构成并不复杂,核心就是计算实例费、存储费、网络费三块,外加容易被忽视的镜像、快照、IP地址等附加项, 新手在选购时别只看“每小时几元”的机房标价,真正决定你账单高低的,往往是计费模式选错、带宽规格理解偏差、以及忘了释放闲置资源,新手租GPU服务器的费用构成有哪些隐藏项很多教程只告诉你租一台机……

    程序编程 2026年10月21日
    100
  • SpikeTel香港大带宽VPS值得入手吗?香港VPS推荐

    SpikeTel香港大带宽VPS以$3.92/月的极致性价比,凭借AMD EPYC 7402P处理器与2.5Gbps高速网络,成为2026年搭建海外业务、加速跨境访问及运行轻量级服务的理想选择,在云计算市场内卷加剧的2026年,寻找一款既稳定又便宜的香港VPS并非易事,大多数用户面临两难选择:要么支付高昂费用购……

    2026年6月27日
    1500
  • AI中台如何选购?AI中台选购需要注意哪些问题?

    选购AI中台的核心决策应基于“业务价值实现效率”与“全生命周期管理能力”的双重考量,企业应优先选择具备成熟工程化落地能力、异构算力兼容性强且数据闭环完善的平台,而非单纯追求算法数量的堆砌,真正优秀的AI中台,必须能够解决模型开发难、上线慢、运维贵三大痛点,将AI能力转化为实际生产力,明确业务场景与战略定位企业在……

    2026年3月8日
    12200
  • asp网站设计有何独特之处?如何体现其优势与挑战?

    ASP(Active Server Pages)作为一种经典的服务器端脚本技术,在网站设计中依然具有独特的价值,它基于微软的IIS服务器运行,通过VBScript或JScript语言实现动态网页生成,适用于构建交互式企业级网站、内容管理系统和数据库驱动应用,尽管现代开发框架层出不穷,但ASP在维护遗留系统、快速……

    2026年2月3日
    12800
  • 港版PS4无法连接服务器怎么办,PS4连不上网络怎么解决?

    当你的港版PS4提示无法连接服务器,绝大多数情况下不是机器坏了,而是网络环境与服务器之间的通路不畅,通过修改DNS、调整网络设置或更换连接方式,通常都能在十分钟内解决,先搞清“无法连接服务器”具体是哪一种情况港版PS4的玩家打开主机后,屏幕上有时候提示“无法在限时内与服务器连接”,有时候是“PSN发生错误”,还……

    2026年10月12日
    100
  • iOS我的世界服务器怎么装光影,我的世界iOS光影安装教程?

    在iOS设备上给我的世界服务器装光影,你真正需要做的是给客户端装光影文件,因为光影是本地渲染效果,服务器只负责同步玩法数据,先搞清楚:服务器和光影到底是什么关系很多玩家在服务器里看到别人有光影,第一反应是“服务器是不是开了光影”,这个理解容易走弯路,行业共识认为,Minecraft的光影本质是客户端通过着色器重……

    2026年10月19日
    200
  • iOS光遇服务器炸了是怎么回事,光遇服务器崩溃怎么解决

    遇到“ios光遇服务器炸了”的情况,你并不孤单,这通常是官方服务器瞬间承载过大、更新包体出错或网络骨干链路拥堵导致,解决办法只有耐心等待官方修复,不建议反复强制重连,先搞清楚“服务器炸了”和“自己网卡”的区别很多玩家一进不去游戏就喊炸服,其实有相当一部分情况是本地网络或者手机设置的问题,在去社交媒体刷“有没有人……

    程序编程 2026年10月21日
    100
  • PS4proxy服务器地址怎么填?,PS4代理地址怎么设置?

    PS4连不上加速器?proxy服务器地址填你电脑或加速盒的局域网IP,端口用代理软件给出的数字,这是在PS4系统设置-网络-自定义里完成的一组操作,很多玩家卡在这一步,是因为没分清“代理服务器地址”和“游戏加速器节点地址”的区别,下面这份填法指南,按场景拆开讲明白,填proxy之前,先搞懂这几个地址各代表什么不……

    2026年10月15日
    000
  • 为什么参数配置很重要?如何正确设置ait参数配置提升效果

    AIT参数配置的核心在于实现模型推理精度、计算性能与显存占用的最佳平衡,通过精细调整量化等级、上下文长度及计算精度,可以在有限的硬件资源下最大化模型的响应速度与输出质量,这是提升AI模型落地应用效率的关键环节,核心结论:精准的参数配置是AI模型高效运行的基石在实际部署与应用大语言模型的过程中,许多用户往往只关注……

    2026年3月9日
    14100
  • 全感知智能家居系统到底好不好用?智能家居系统品牌推荐

    全感知智能家居系统并非简单的设备联网,而是通过多模态传感器与AI算法深度融合,实现从“被动响应”到“主动预判”的居住体验升级,全感知智能家居系统如何重新定义居住体验传统的智能家居往往停留在“指令执行”层面,比如你喊一声“打开灯光”,灯才亮,而全感知系统则像一位隐形的管家,它不需要你开口,就能通过环境数据的变化预……

    2026年5月28日
    6900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注