You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码迁移至mysqli技术咨询:环境配置、代码改写及必要性

嘿,针对你提到的关于mysqli的几个问题,我来给你详细说说:

1. 检查php.ini确保mysqli可用的配置

要让mysqli正常工作,主要关注以下几点:

  • 启用mysqli扩展:打开php.ini文件,找到对应系统的扩展行:
    • Windows系统:确保extension=php_mysqli.dll这一行没有被注释(前面没有分号;)
    • Linux/macOS系统:确保extension=mysqli.so这一行没有被注释
  • 可选配置(默认即可):比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:05:51