PHP访问MySQL的5个基本步骤
PHP连MySQL,基本说穿了就五步。步骤别被框架和ORM绕晕,基本直接看PDO怎么干活——这玩意儿是步骤PHP官方推荐的数据库扩展,比老掉牙的基本mysqli更安全,写法也更干净。步骤
第一步,基本建连接。步骤你得先有个数据源,基本也就是步骤DSN字符串。它像一把钥匙,基本告诉PHP“我要找哪个数据库,步骤用什么编码,基本跑在哪个端口”。步骤比如这样:
$dsn = 'mysql:host=127.0.0.1;dbname=blog;charset=utf8mb4'; $pdo = new PDO($dsn,基本 'root', 'your_password');
看到没,三样东西:主机地址、库名、字符集。字符集必须写utf8mb4,不然中文存进去变乱码,别问我怎么知道的——上个月帮同事调bug,他漏了charset,标题里的“咖啡”直接变成“å’–å•¡”,整页像被外星人啃过。
第二步,设错误模式。这一步很多人跳过,但我不建议偷懒。默认情况下PDO遇到SQL错误只是悄悄返回false,你查半天不知道哪儿挂了。改成异常模式,让错误直接炸出来:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
这行代码等于给数据库操作装了报警器。一旦SQL写错,马上抛出异常,你立刻看到是哪条语句、哪个字段出了问题。省下的调试时间够你喝三杯手冲。
第三步,写预处理语句。这是最关键的一步,也是很多人用错的地方。别把用户输入直接拼接进SQL——那是自杀。用占位符,让PDO帮你转义:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email'); $stmt->execute(['email' => $_POST['email']]); 注意那个冒号开头的:email,它就是占位符。execute的时候传入数组,键名对应占位符,值自动被处理成安全内容。哪怕用户输入“'; DROP TABLE users;--”这种鬼东西,也只会被当成普通字符串,数据库毫发无伤。
第四步,取数据。这一步最灵活,取决于你想要什么格式。fetch()拿单条记录,fetchAll()拿全部,还可以指定返回风格。默认是关联数组加数字索引,字段名当键名,用起来直观:
$user = $stmt->fetch(PDO::FETCH_ASSOC); echo $user['name'];
如果你只想要一列值,比如所有用户的邮箱,用fetchColumn()更省内存。要对象?也行,PDO::FETCH_OBJ把每条记录变成stdClass,字段直接当属性访问:$user->name。别小看这个选择,处理大量数据时,fetchAll可能撑爆内存,逐行fetch才是王道——我处理过十万行日志导出,用fetchAll直接内存溢出,改成while循环逐行拉取,流畅得像切黄油。
第五步,关连接。其实这步可以省略——PHP脚本跑完,连接自动释放。但如果你在一个长生命周期脚本里(比如用Swoole跑常驻进程),就得手动置空:
$pdo = null;
就这么简单。连接对象没了,MySQL那边就断开了。不过日常写网页接口,这步基本用不上,知道有这回事就行。
五个步骤走完,你会发现PHP访问MySQL没那么玄乎。连接、配异常、预处理、取数据、收尾——骨子里就是一套固定流程。你真正要花心思的是SQL本身怎么写、索引怎么建、事务怎么控制。这些步骤只是地基,地基稳了,上面盖什么楼都踏实。
对了,最后提醒一句:生产环境千万别用root连数据库,权限大到能炸掉整个库。建个专用账号,只给SELECT、INSERT、UPDATE、DELETE权限,够用就好。这不算第六步,算是我踩坑后给你的保命贴士。
本文地址:http://www.79wt.cn/news/748a1299239.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。