搜索

php连接数据库代码

发表于 2026-10-17 06:04:35 来源:烟消火灭网

php连接数据库代码

凌晨三点,接数据库服务器日志突然刷出几百条数据库连接超时。代码我盯着屏幕骂了一句,接数据库然后翻开三个月前自己写的代码连接代码——果然,用的接数据库是老掉牙的mysql_connect()。PHP 7早就把它删了,代码我居然没发现。接数据库那天之后,代码我把连接数据库的接数据库写法彻底换成了PDO,再也没在半夜被报警短信吵醒过。代码

先看最基础的接数据库PDO连接方式。它长这样:

<?代码php $dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4'; $user = 'root'; $pass = 'password'; try {  $pdo = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); echo '连接成功'; } catch (PDOException $e) {  error_log($e->getMessage()); exit('数据库连接失败,请稍后再试'); } ?接数据库>

$dsn里那个charset=utf8mb4不是装饰品。我吃过亏——之前用默认latin1存中文,代码页面显示乱码,接数据库用户骂了三天。后来加上这个参数,世界清净了。UTF-8MB4能存emoji,也能存生僻字,别省这一步。

如果你还在用mysqli扩展,也不是不行。面向对象的写法比过程式清晰得多:

<?php $mysqli = new mysqli('localhost', 'root', 'password', 'test'); if ($mysqli->connect_errno) {  error_log('连接错误: ' . $mysqli->connect_error); exit('数据库暂时不可用'); } $mysqli->set_charset('utf8mb4'); ?>

看,set_charset这行必须手动调,PDO里写在DSN里就行。mysqli的API更接近底层,但写起来啰嗦。个人建议:新项目直接上PDO,别犹豫。PDO支持12种数据库驱动,哪天你从MySQL迁到PostgreSQL,只改$dsn那行就能跑,mysqli就做不到。

连接池?PHP没有这东西。每个请求结束,连接就断了。所以别试图用静态变量保存连接对象跨请求复用——那是白费劲。PHP-FPM模式下,每个worker进程自己维护连接,你只需要保证脚本执行完不泄漏连接就行。PDO对象在脚本结束后自动销毁,连接自动释放,不用手动close。

有个坑很多人踩过:把数据库密码硬编码在代码里。我见过某公司把生产库密码写在GitHub公开仓库里,结果被爬虫抓走,数据被删了三次。正确做法是用环境变量:

<?php $pdo = new PDO( 'mysql:host=' . getenv('DB_HOST') . ';dbname=' . getenv('DB_NAME'), getenv('DB_USER'), getenv('DB_PASS') ); ?>

部署时在服务器上设置环境变量,代码里不出现真实密码。哪怕代码泄露,别人也拿不到凭证。这个习惯救过我一次——某次外包团队把代码发到公开论坛求助,里面密码字段是空的,因为走了环境变量。

连接超时设置也别忽略。默认情况下,PDO可能傻等30秒才报错。用户点击按钮后页面转圈半分钟,谁受得了?在$dsn里加个参数:

$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4;connect_timeout=5';

5秒连不上就放弃,快速失败比慢吞吞崩溃强。配合try-catch里的error_log,问题能第一时间暴露在日志里。

最后说个细节:连接成功后,记得检查时区。MySQL默认时区跟PHP可能不一致,导致时间字段差8小时。在连接后立刻执行$pdo->exec("SET time_zone = '+08:00'"),或者直接在MySQL配置里设default-time-zone。这问题排查起来贼隐蔽,数据看着没问题,就是时间不对,坑过不少新手。

代码就这些。数据库连接不是花活,稳比炫技重要。用PDO、设字符集、配超时、藏密码——做到这四点,半夜被电话吵醒的概率能降九成。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by php连接数据库代码,烟消火灭网   sitemap

回顶部