MySQLi连接需按host、username、password、database顺序传参,host不包含库名;PDO需在DSN中指定port和charset=utf8mb4,timeout通过$options设置;配置应外置环境变量或安全文件,连不上时优先命令行验证并检查权限、网络及OPcache。

MySQLi 连接参数怎么改 host/user/pass/dbname
直接改 mysqli_connect() 的前四个参数就行,顺序不能错:host、username、password、database。比如从本地测试切到生产环境,就把 'localhost' 换成实际 IP 或域名,'root' 换成权限最小的专用账号。
常见错误是把数据库名写进 host(如 'localhost/testdb'),这会连不上,报错 Access denied for user 或直接超时。host 只负责定位服务器,库名必须单独传第四个参数。
- 密码含特殊字符(如
@、/)不用 URL 编码,mysqli_connect()不走 URL 解析 -
端口非默认 3306 时,host 要写成
'192.168.1.100:3307',不能用额外参数传 - 连接失败时先用
mysqli_connect_error()看具体提示,比盲猜快得多
PDO 连接字符串里 port/charset/timeout 怎么加
PDO 的 DSN 是关键,格式为 mysql:host=xxx;port=xxx;dbname=xxx;charset=utf8mb4。port 和 charset 必须塞进 DSN 字符串里,不能靠 $options 数组补。
容易漏掉的是 charset=utf8mb4 —— 不加的话,存 emoji 或四字节 UTF-8 字符会变问号或报错 Incorrect string value;port 不写则默认 3306,但显式写出更稳妥,尤其 Docker 或云数据库常换端口。
立即学习“PHP免费学习笔记(深入)”;
SHOPEX简灰服装商城整站源码下载。 安装方法:1.解压上传程序至网站根目录.. 访问:域名/bak.(用户名:admin 密码:123456)2.进入帝国备份王后,配置数据库数据库信息.选择-www.taomoban.net目录.还原数据库.3.修改FTP目录下的config/config.phpphp 数据库连接信息.4.登陆网站后台--清空缓存..5.删除bak文件夹 后台:shopadm
-
timeout要通过$options传:[PDO::ATTR_TIMEOUT => 5],单位秒 - DSN 中的
unix_socket(如unix_socket=/var/run/mysqld/mysqld.sock)优先级高于 host+port,调试时注意是否意外走了 socket - PHP 8.1+ 对 DSN 中未转义的分号敏感,如果密码含
;,整个 DSN 会截断,得换用PDO::ATTR_CONNECTION_OPTIONS分离处理
配置文件里数据库参数被硬编码,怎么安全替换
别在代码里写死 $host = '127.0.0.1'。用环境变量或独立配置文件,比如 .env 配 DB_HOST=prod-db.example.com,再用 getenv('DB_HOST') 或 $_ENV['DB_HOST'] 读取。
注意 PHP 默认不自动加载 .env,得用 parse_ini_file() 或第三方库(如 vlucas/phpdotenv)。如果图省事直接 include 'config.php',确保该文件不在 Web 根目录下,否则可能被直接下载泄露密码。
- 敏感参数(
DB_PASSWORD)避免记录在 Git 历史里,加进.gitignore - 不同环境(dev/staging/prod)用不同配置文件,通过
APP_ENV=production切换,别靠注释开关 - 用
isset()或空合并操作符??做兜底,比如getenv('DB_PORT') ?? '3306',防环境变量缺失崩掉
改完参数连不上?快速定位三步法
不是配错就是通不了。先跳过 PHP,用命令行验证基础连通性:mysql -h $HOST -P $PORT -u $USER -p。能登进去,说明网络、账号、权限都没问题;登不进,就别折腾 PHP 了。
如果命令行能连,PHP 还报错,重点查三处:SELinux(Linux)、PHP 的 allow_url_fopen 是否关了(虽不影响 mysqli,但会影响某些自动加载逻辑)、以及 MySQL 用户的 host 权限字段是否允许该 IP 连接(比如只给了 'user'@'localhost',远程 PHP 就连不上)。
- 错误信息里带
Connection refused→ 网络或 MySQL 服务没起来 - 出现
Access denied for user→ 用户名、密码、host 三者组合不匹配,查SELECT User,Host FROM mysql.user; - 报
SSL connection error→ MySQL 服务强制 SSL,但 PDO/MySQLi 没配PDO::MYSQL_ATTR_SSL_*参数










