怎么在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/%e6%80%8e%e4%b9%88%e5%9c%a8php%e4%b8%ad%e8%bf%9e%e6%8e%a5mysql%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%9f%ef%bc%8cphp%e6%80%8e%e4%b9%88%e8%bf%9e%e6%8e%a5%e6%95%b0%e6%8d%ae%e5%ba%93/

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

相关推荐

  • CSGO国服社区躲猫猫怎么进,CSGO躲猫猫服务器怎么加入?

    想进CSGO国服社区服务器玩躲猫猫,不用去国际服折腾,直接通过完美世界竞技平台或5EPlay的社区服列表即可进入,少数地图需要先订阅创意工坊文件,如果你想在国服环境里体验躲猫猫(Hide and Seek),核心路径有两条:一是平台自带的社区服浏览器,二是控制台直连IP,这篇文章会把从零开始的每一步拆开讲,包括……

    2026年10月4日
    000
  • 服务器怎么配置CDN加速?,网站打开速度慢如何解决?

    服务器CDN加速是通过在地理分布的边缘节点缓存静态内容,减少用户与源站之间的物理距离,从而极大地降低延迟并减轻源站服务器压力的最优技术方案,服务器CDN加速的核心逻辑与运作机制分发网络)并非单一的服务器,而是一个由全球或全国分布的边缘节点组成的网络系统,其核心目标是将内容“推”向离用户最近的地方,边缘节点的缓存……

    2026年7月12日
    18900
  • 果师兄恢复数据安全吗,手机数据恢复软件哪个靠谱

    果师兄无法直接恢复被物理损坏或彻底格式化的数据,其核心功能在于通过云端备份同步和误删文件的短期缓存恢复,对于深度数据丢失,建议立即停止写入并寻求专业线下服务,很多果师兄用户在使用iPhone或iPad时,都会遇到照片消失、微信聊天记录清空或者系统崩溃导致文件打不开的情况,这时候,第一反应往往是搜索“果师兄恢复数……

    2026年5月26日
    4100
  • dnf总提示连接服务器失败怎么回事,怎么解决

    DNF总提示连接服务器失败,九成情况不是你电脑的问题,而是本地网络到腾讯服务器之间的链路出了岔子,少数情况才是官方服务器波动,先重启路由器和光猫,再用系统自带的修复命令跑一遍,大概率就能解决,dnf连接服务器失败怎么解决——先按这套流程自查游戏弹出“连接服务器失败”时,先别急着卸载重装,也别反复点登录,服务器连……

    2026年10月19日
    200
  • 广州独立机柜怎么选配置才能满足需求,有哪些注意事项?

    先算电力与U数需求,再定带宽类型,最后按业务等级和预算锁定机房Tier级别,没有一步到位的万能配置,只有基于业务阶段和预算的权衡,在创业初期使用共享机柜,用户较多或部署托管高可用架构后,会明显感受到资源瓶颈,广州的独立机柜市场供给充足,但配置差异极大,选择不对容易造成成本浪费或业务受限,独立机柜和共享机柜的核心……

    2026年10月9日
    000
  • 戴尔T40塔式服务器值得买吗,小型企业用合适吗

    戴尔T40塔式服务器怎么样?结论先给:它适合小团队当“第一台服务器”,跑文件共享、打印服务、轻量ERP和备份够用,但别指望它扛高并发虚拟化和7×24重负载, 2026年再看这台机器,它不是新平台,胜在结构简单、采购成本可控、塔式机箱好安置,买之前把盘位、内存、远程管理和售后这四件事想清楚,比盯着CPU型号更实际……

    程序编程 2026年10月24日
    100
  • excel柱形对比图怎么做?excel柱状图制作教程

    制作Excel柱形对比图的核心在于明确对比维度、规范数据源结构并合理选择图表类型,通常使用簇状柱形图进行同类项对比,使用堆积柱形图展示部分与整体关系,通过调整颜色、添加数据标签和统一坐标轴刻度来确保信息传达的准确性与直观性,为什么你的柱形图看起来像“报表”而不是“图表”很多职场人在处理数据时,习惯直接将Exce……

    2026年7月7日
    8100
  • 新加坡旅游要多少钱,新加坡旅游费用

    2026年新加坡旅游的核心结论是:凭借免签便利、双语环境及高度成熟的医疗与教育体系,新加坡已成为家庭亲子游、高端商务考察及留学移民的首选目的地,建议提前规划樟宜机场中转及滨海湾区域住宿以优化体验,新加坡旅游核心优势与2026年最新政策解析免签政策带来的流量红利与出行便利自2024年中新互免签证生效以来,2026……

    2026年5月18日
    3300
  • 华为h24m05服务器引导修复难吗,怎么操作?

    华为H24M05服务器引导修复的核心答案是:优先检查RAID卡配置和Boot启动项顺序,多数情况下通过IBMC远程控制台进入BIOS调整启动设备即可解决,若系统盘引导文件损坏则需使用系统镜像修复或重装,引导修复先分清故障类型华为H24M05是机架式服务器,常见于中小企业的虚拟化节点和数据库集群,引导故障的表现形……

    2026年10月9日
    200
  • VMISS日本东京机房7折是真的吗?VPS月付3.5加元起靠谱吗

    VMISS近期上线日本东京机房并提供7折优惠,同时洛杉矶CN2 GIA等线路VPS月付低至3.5加元起,对于追求低延迟和稳定连接的用户而言,这是优化跨境网络体验的高性价比选择,在数字化办公与全球业务拓展日益频繁的今天,网络连接的稳定性与速度直接决定了工作效率,许多用户在选择海外VPS时,往往在价格、延迟和线路质……

    2026年6月27日
    1810

发表回复

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