怎么在PHP中连接MySQL数据库?,php怎么连接数据库

在PHP中连接MySQL数据库服务器,优先用PDO或mysqli扩展,准备好主机、端口、库名、用户名、密码,建立连接后捕获异常并设置字符集,就能执行SQL。 真正影响成败的通常不是代码本身,而是扩展是否开启、账号权限、网络端口和字符集这些细节。

怎么在PHP中连接MySQL数据库服务器:先搞清连接方式和前提

PHP连接MySQL不是单一函数,而是一套组合动作,你需要让PHP进程找到MySQL服务,拿到合法身份,再通过协议发送SQL,MySQL默认监听3306端口,PHP端常用PDO或mysqli扩展,两者都能完成连接,但适用场景不同。

【PHP】教你10分钟快速学会php连接数据库
加载中
【PHP】教你10分钟快速学会php连接数据库

环境检查:PHP扩展和MySQL服务是否就绪

先别急着写代码,很多“连不上”其实是环境没准备好。

  • 查看PHP已加载的数据库扩展:php -m | grep -E 'mysqli|pdo_mysql'
  • 查看PHP版本和配置文件路径:php -v、php --ini
  • 确认MySQL服务运行:Linux用systemctl status mysql,Windows在服务管理器查看。
  • 检查配置文件,php.ini中需取消注释:extension=mysqli、extension=pdo_mysql。
  • 如果使用宝塔、phpstudy、XAMPP,面板里一般有“安装扩展”入口,路径和命令行环境可能不同。

PHP官方手册明确说明,PDO_MYSQL是PDO的MySQL驱动,mysqli则专门面向MySQL,扩展没开,代码写得再漂亮也会报“Class not found”或“could not find driver”。

PHP连接MySQL数据库用mysqli还是PDO好

这个问题没有绝对答案,但可以从项目需求判断。

对比项 mysqli PDO
支持数据库 仅MySQL 多种数据库
预处理 支持 支持,命名参数更灵活
异常模式 需配置,PHP 8.1+默认更严格 可设ERRMODE_EXCEPTION
学习成本 只学MySQL较直接 DSN写法统一,迁移方便
推荐场景 老项目、纯MySQL、团队熟悉 新项目、需要抽象层、重视可维护性

业内专家指出,生产环境应优先使用预处理语句,避免把用户输入拼进SQL,新项目用PDO更省心;如果只连MySQL且已有mysqli代码,继续用mysqli也没问题。

怎么在PHP中连接MySQL数据库?,php怎么连接数据库

最小可用连接代码:mysqli与PDO各一段

mysqli面向对象写法:

$mysqli = new mysqli('127.0.0.1', 'app_user', '强密码', 'app_db', 3306);
$mysqli->set_charset('utf8mb4');
$result = $mysqli->query('SELECT id, name FROM users LIMIT 5');
while ($row = $result->fetch_assoc()) {
    echo $row['name'];
}
$mysqli->close();

PDO写法:

$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=app_db;charset=utf8mb4';
$pdo = new PDO($dsn, 'app_user', '强密码', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
]);
$stmt = $pdo->prepare('SELECT id, name FROM users WHERE email = ?');
$stmt->execute([$email]);
$user = $stmt->fetch();

注意utf8mb4,它能存emoji和更多字符,只写utf8在部分MySQL版本里是“不完全UTF-8”,容易出乱码。

PHP连接远程MySQL数据库失败怎么办:权限、网络与安全组

本地连接成功,远程却失败,问题通常集中在三处:MySQL账号不允许远程、网络端口不通、云平台安全组没放行,按顺序排查,比反复改代码有效。

检查MySQL用户授权和host限制

MySQL用户由“用户名@主机”共同定义。app_user@localhost只能本机登录,远程连接会报1045。

登录MySQL后执行:

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

生产环境不建议长期用,可以改成'app_user'@'10.0.0.5',只允许应用服务器内网IP。

检查bind-address、防火墙和云服务器安全组

MySQL可能只监听127.0.0.1,编辑配置文件,常见路径是/etc/mysql/mysql.conf.d/mysqld.cnf,找到bind-address,改为0.0.0或指定内网IP,改完重启:

sudo systemctl restart mysql

然后检查系统防火墙,Ubuntu可用sudo ufw allow from 应用服务器IP to any port 3306,云服务器还要看安全组入方向规则,北京地区的PHP项目连接云MySQL数据库时,通常优先走内网地址,延迟更低,也少暴露公网端口。

怎么在PHP中连接MySQL数据库?,php怎么连接数据库

常见报错与排查路径

  • SQLSTATE[HY000] [2002] Connection refused:服务没启动、端口不通、bind-address限制。
  • SQLSTATE[28000] [1045] Access denied:用户名、密码、host权限不匹配。
  • caching_sha2_password认证失败:旧PHP的mysqlnd可能不支持MySQL 8默认插件,升级PHP或调整认证方式,长期方案是升级客户端。
  • localhost与0.0.1不同,PDO中host=localhost可能走Unix socket,host=127.0.0.1走TCP,远程连接统一写IP或域名。

本地PHP环境连接MySQL数据库的步骤与不同场景

本地PHP环境连接MySQL数据库的步骤

本地开发最常见的是集成环境,XAMPP、phpstudy、MAMP、Docker都行。

  • 启动MySQL服务,确认端口是3306。
  • 用phpMyAdmin或命令行创建数据库:CREATE DATABASE app_db DEFAULT CHARACTER SET utf8mb4;
  • 创建专用账号,不要直接用root跑应用。
  • PHP连接参数:主机0.0.1,端口3306,库名app_db。
  • 如果PHP跑在Docker里,MySQL在宿主机,主机名可能不是localhost,而是host.docker.internal或宿主机内网IP。

云服务器与容器场景的配置重点

容器里连接另一个MySQL容器,主机名用服务名,比如Docker Compose中MySQL服务叫mysql,PHP的DSN就写host=mysql,前提是它们在同一个自定义网络,用默认bridge网络时,服务名解析可能失效。

云数据库通常提供内网地址和白名单,把应用服务器内网IP加入白名单,开启SSL后,PDO DSN可加ssl_ca等参数,连接串不要写死在代码里,放进环境变量。

虚拟主机PHP连接MySQL数据库要多少钱

虚拟主机方案通常已经包含MySQL数据库,费用随空间大小、流量、数据库数量变化,入门套餐年费可能较低,独立云数据库则按实例规格、存储、备份和时长计费,若只是个人博客或小型展示站,虚拟主机够用,若涉及高并发、事务和远程访问,云数据库或自建云服务器更合适,价格不是唯一指标,连接数、备份、内网延迟更影响体验。

让连接更稳:字符集、异常处理、预处理与生产建议

行业共识认为,数据库密码不应写进公开仓库,用.env、配置中心或云密钥管理,Web目录下不要放含密码的PHP文件。

怎么在PHP中连接MySQL数据库?,php怎么连接数据库

字符集统一为utf8mb4

连接后执行SET NAMES utf8mb4,或PDO DSN写charset=utf8mb4,mysqli用set_charset('utf8mb4'),数据库、表、字段也统一,否则中文、emoji、特殊符号可能乱码。

用预处理抵挡SQL注入

不要写"SELECT FROM users WHERE id = " . $_GET['id'],用:

$stmt = $pdo->prepare('SELECT  FROM users WHERE id = ?');
$stmt->execute([$id]);

mysqli也支持prepare和bind_param。PDO::ATTR_EMULATE_PREPARES => false可让MySQL执行真正的预处理,通常更安全。

配置异常处理与超时

PDO设置PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,用try-catch捕获PDOException,mysqli在PHP 8.1+默认错误模式更严格,也可显式设置mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);,设置连接超时,避免页面卡死。

连接生命周期与性能

PHP-FPM通常每个请求新建连接,请求结束释放,持久连接能减少握手,但可能占用MySQL连接数,使用不当会拖垮数据库,优先优化SQL索引、减少查询次数,连接数上限、max_connections、wait_timeout要结合业务调整。

怎么在PHP中连接MySQL数据库服务器常见问题

PDO连接MySQL和mysqli连接MySQL能同时开吗?

能,它们是独立扩展,同一项目不同模块可以分别使用,但同一业务层最好统一,避免维护两套错误处理和连接配置。

PHP连接MySQL数据库失败提示2002怎么排查?

先确认MySQL进程存在,再用telnet 主机 3306或nc -vz 主机 3306测端口,端口不通就查bind-address、系统防火墙、云安全组,端口通但报1045,再查账号host和密码。

PHP 8连接MySQL 8报认证错误怎么办?

MySQL 8默认常用caching_sha2_password,PHP需使用较新的mysqlnd驱动,升级PHP和MySQL客户端库是首选,临时可改用户认证插件,但长期看升级环境更稳妥,确认php -i | grep mysqlnd能看到mysqlnd信息。

结论很直接:用PDO或mysqli建立连接,设置utf8mb4和异常模式,远程访问时打通账号权限与网络端口,再用预处理执行SQL。 把这几步做扎实,PHP连接MySQL数据库服务器就不再是反复踩坑的环节。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/761977.html

赞 (0)
英雄联盟手游服务器连接不上怎么办,连接异常原因有哪些?
上一篇 2026年10月18日 09:32
街篮到底有多少服务器?,哪个服务器最火爆?
下一篇 2026年10月18日 09:36

相关推荐

  • 反恐精英ol一直连接服务器?,csol连接失败怎么办?

    反恐精英ol一直连接服务器,多数情况下不是游戏坏了,而是本地网络到服务器之间的链路出了问题,按照“重启网络、测链路、换节点、修文件”的顺序排查,能解决相当一部分问题,csol一直正在连接服务器进不去?先分清卡在哪个环节“一直连接服务器”是个很模糊的说法,实际体验完全不同,有人卡在登录界面转圈,有人选完频道后提示……

    2026年10月10日
    100
  • 服务器cpu核数和内存怎么搭配?服务器配置选择指南

    服务器CPU核数与内存的配置平衡,直接决定了业务系统的稳定性与计算效率,二者并非简单的“越多越好”,而是存在严格的性能木桶效应,核心结论在于:CPU核数决定了服务器的并发处理能力上限,而内存容量则划定了数据吞吐与响应速度的底线,二者必须保持“黄金配比”,任何一方的短板都会造成严重的资源浪费或性能瓶颈, 对于大多……

    2026年4月4日
    9100
  • 怎么设置百度地图的gps定位服务器地址

    设置百度地图的GPS定位服务器地址,本质是在安卓设备上修改定位服务提供方,将默认的Google或厂商定位源切换为百度地图的定位SDK服务,具体操作通常需要通过开发者选项或修改系统配置文件来完成,对于普通用户而言,手机自带的定位功能已经满足日常导航需求,但部分特殊场景——比如使用老旧安卓机、刷机后的系统、或需要精……

    2026年8月30日
    400
  • 美国EtherNet VPS测评,2.76美元/月方案实测对比,美国VPS哪家便宜稳定

    美国EtherNetservers VPS 2.76美元/月方案实测结论:该方案虽具备极低的入门门槛和基础的SSD存储,但在2026年的网络环境下,其网络延迟较高且CPU单核性能存在明显瓶颈,仅适合预算极度敏感的个人博客或轻量级测试环境,不推荐用于高并发业务或需要低延迟的游戏服务器搭建, 方案基础配置与硬件架构……

    2026年5月13日
    6000
  • AI智能视觉原理是什么?计算机视觉怎么实现的?

    AI智能视觉原理的核心在于利用深度神经网络模拟人类视觉系统的感知与认知过程,通过数学算法将图像像素数据转化为高层语义信息,从而实现对目标的识别、追踪与理解,这一过程并非简单的图像处理,而是基于数据驱动的特征学习,让机器具备从无序像素中提取结构化知识的能力,数据输入与数字化表达机器视觉的起点是图像的数字化,在计算……

    2026年2月25日
    15300
  • 怎么查mt4平台的服务器地址?,mt4查看服务器ip教程

    查MT4平台服务器地址最快的办法,就是打开MT4软件,点击左上角“文件”菜单,选择“登录到交易账户”,弹窗顶部显示的字符串就是你正在使用的服务器地址,整个过程不到十秒,但它牵涉到交易连接的稳定性、平台选择的优劣,甚至直接影响到你下单时的延迟表现,对于做外汇、贵金属或原油的朋友来说,搞懂这个地址的来龙去脉,比单纯……

    2026年10月3日
    100
  • 怎么查IP服务器网络线路?,查询服务器线路的方法有哪些

    查IP服务器是什么网络线路,最直接的办法是查IP的AS号和归属,再用traceroute或mtr看路由,最后用多地探测确认单线、双线还是BGP多线, 只看IP归属地容易误判,CDN、回程路由和BGP策略都会影响实际访问线路,查IP线路前,先分清AS号、归属库和路由AS号、归属库、实际路由不是一回事IP归属库告诉……

    2026年9月26日
    100
  • nf5270m4浪潮服务器硬盘怎么解锁,有哪些方法?

    开篇直接给答案浪潮NF5270M4解锁硬盘的核心逻辑是:借助服务器RAID卡配置界面或直通模式,将物理硬盘从RAID阵列中解绑并重新识别为可独立读写状态,关键操作在于进入RAID卡BIOS并执行“删除阵列”或“硬盘直通”设置,对于大多数用户而言,这个动作并非物理锁死,而是逻辑层面的写保护或阵列占用,通过简单的按……

    2026年9月27日
    100
  • 证书文件更新失败怎么办?服务器证书更新教程

    更新证书文件的核心在于确保服务器配置与证书链完整匹配,并定期轮换密钥以维持HTTPS加密连接的有效性,在数字化运营中,SSL/TLS证书不仅是网站安全的“防盗门”,更是搜索引擎信任度的“通行证”,对于运维人员和网站管理员而言,证书过期或配置错误导致的访问中断、浏览器红牌警告,是极具破坏性的体验,2026年的We……

    程序编程 2026年5月27日
    3900
  • AI云无人值守怎么买?AI云无人值守购买流程详解

    购买AI云无人值守系统的核心决策在于明确业务场景需求、甄选具备全栈技术能力的供应商、以及确认后续运维服务的可持续性,而非单纯比较硬件价格,企业应优先选择支持私有化部署或混合云架构、具备成熟算法库且能提供定制化迭代的品牌服务商,通过正规渠道获取授权,避免因购买盗版或低端方案导致的数据泄露与业务停摆风险, 前期需求……

    2026年3月4日
    11300

发表回复

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