PHP项目从MySQL扩展迁移到MySQLi的基础函数改写咨询
原有尝试写法的核心问题
- 变量作用域错误:函数内部默认无法直接访问config.php中定义的全局配置变量,会触发未定义变量报错
- 连接资源未复用:每次调用函数都会新建数据库连接,不仅浪费服务器资源,后续其他数据库操作也无法复用该连接
- 存在多处语法错误:函数参数定义逻辑错误、缺少语句结束分号、缺少括号闭合
正确改写代码(完全兼容原有调用逻辑,无需修改engine.php中的调用代码)
<?php // 全局变量存储数据库连接资源,供所有数据库操作复用 $mysql_link = null; function db_connect($db_host, $user_login, $user_password) { global $mysql_link; $mysql_link = mysqli_connect($db_host, $user_login, $user_password); if (!$mysql_link) { // 开发阶段可打开下方注释查看具体连接错误 // echo mysqli_connect_error(); return false; } // 统一设置字符集,避免中文乱码,可根据你的实际字符集调整 mysqli_set_charset($mysql_link, 'utf8mb4'); return true; } function SelectDB($db_name) { global $mysql_link; if (!$mysql_link) { return false; } return mysqli_select_db($mysql_link, $db_name); }
后续其他函数改写参考规则
你可以参照以下对应关系快速改写原有mysql扩展的代码:
mysql_query($sql)→mysqli_query($mysql_link, $sql)mysql_fetch_assoc($result)→mysqli_fetch_assoc($result)mysql_fetch_row($result)→mysqli_fetch_row($result)mysql_num_rows($result)→mysqli_num_rows($result)mysql_insert_id()→mysqli_insert_id($mysql_link)mysql_error()→mysqli_error($mysql_link)mysql_close()→mysqli_close($mysql_link)
内容的提问来源于stack exchange,提问作者Newbie PHP
相关产品推荐
相关产品推荐

