代码迁移至mysqli技术咨询:环境配置、代码改写及必要性
嘿,针对你提到的关于mysqli的几个问题,我来给你详细说说:
1. 检查php.ini确保mysqli可用的配置
要让mysqli正常工作,主要关注以下几点:
- 启用mysqli扩展:打开php.ini文件,找到对应系统的扩展行:
- Windows系统:确保
extension=php_mysqli.dll这一行没有被注释(前面没有分号;) - Linux/macOS系统:确保
extension=mysqli.so这一行没有被注释
- Windows系统:确保
- 可选配置(默认即可):比如
mysqli.default_host、mysqli.default_user这些默认连接参数,如果你代码里手动指定了连接信息,不用修改这些 - 验证是否生效:创建一个
phpinfo.php文件,写入<?php phpinfo(); ?>,访问这个文件后搜索“mysqli”,如果能看到完整的模块信息,说明配置没问题
2. 把旧的mysql代码改写为mysqli版本
我给你改成过程式风格(和你原来的代码风格一致),同时优化了错误处理(别再用@屏蔽错误了,不利于调试):
// 直接连接并指定数据库,省去单独选库的步骤 $con = mysqli_connect("localhost", "username", "pass", "DB_NAME"); // 检查连接是否失败 if (!$con) { exit("Unable to connect to the Database server: " . mysqli_connect_error()); } // 执行查询 $query = mysqli_query($con, "SELECT somme_field FROM some_table"); // 检查查询是否成功 if (!$query) { exit("Query failed: " . mysqli_error($con)); } // 遍历结果集,和原来的mysql_fetch_array用法一致 while ($index = mysqli_fetch_array($query)) { // 这里写你的业务逻辑,比如 echo $index['somme_field']; } // 好习惯:用完结果集和连接后关闭它们 mysqli_free_result($query); mysqli_close($con);
如果你更喜欢面向对象风格,可以这样写:
$con = new mysqli("localhost", "username", "pass", "DB_NAME"); if ($con->connect_error) { exit("Unable to connect to the Database server: " . $con->connect_error); } $query = $con->query("SELECT somme_field FROM some_table"); while ($index = $query->fetch_array()) { // 业务逻辑 } $query->free(); $con->close();
3. 是否需要全部迁移至mysqli?
答案是非常有必要,原因如下:
- mysql扩展早就被废弃了:PHP 5.5.0就把mysql标记为废弃,PHP 7.0.0直接移除了这个扩展。如果你的服务器升级到PHP7+,旧代码会直接报错,网站无法运行
- 安全性提升:mysqli支持预处理语句,能有效防范SQL注入,这是mysql扩展做不到的
- 功能更强大:mysqli支持事务、多语句执行、异步查询等高级特性,能满足更复杂的业务需求
如果你的网站代码量很大,可以逐步迁移:先把数据库连接部分改成mysqli,再逐个页面修改查询、结果处理的代码,不用一次性改完,但最终一定要全部迁移完成,避免未来服务器升级带来的崩溃风险
内容的提问来源于stack exchange,提问作者Roi
相关产品推荐
相关产品推荐

