PHP mysql 到 mysqli 迁移问题(自定义函数,程序风格)
Posted
技术标签:
【中文标题】PHP mysql 到 mysqli 迁移问题(自定义函数,程序风格)【英文标题】:PHP mysql to mysqli migration issues (custom functions, procedural style) 【发布时间】:2015-10-27 22:31:57 【问题描述】:早安
我正计划将我从 mysql 扩展制作的整个应用程序迁移到 mysqli,因为下一个 php 版本将不再支持 mysql,我不想在最后几分钟犯傻。
目前所有页面都有 2 个主要内容: 1) dbdata.inc.php 包含数据库连接数据 2) function.inc.php 包含最常用的函数
我想保持程序风格也使用 mysqli 扩展,但我读到所有 mysqli 函数都必须接收连接链接作为参数。
我正在寻求有关最佳方式(即最轻松的解决方案)的建议,以便在不发疯和彻底重写我所有的 php 页面的情况下进行迁移。
dbdata.inc.php的实际内容:
$yare_db = mysql_connect($yaredb_host,$yaredb_user,$yaredb_pass) or die("some error warning<br>");
mysql_select_db($yaredb_conn);
mysql_query("SET NAMES 'utf8'");
functions.inc.php 中定义的最常用函数:
function YQUERY($query)
$res = mysql_query($query) or die(mysql_error());
return $res;
function FETCHA($res)
$rs = mysql_fetch_array($res);
return $rs;
function NUMROWS($res)
$num = mysql_num_rows($res);
return $num;
function AFFROWS()
$num = mysql_affected_rows();
return $num;
/* an important function filtering user input texts before passing them to queries */
function msg_safe($string)
// some regex and \n to "<br>" substitutions...
$string = mysql_real_escape($string);
return $string;
好吧,现在的问题是如何迁移:
1) 我应该将数据库连接作为函数参数传递吗? IE。类似:
function YQUERY($link,$query)
$res = mysqli_query($link,$query);
return $res;
?
2) 我是否应该在函数内部将 db 连接(在页面开始时定义到包含的 dbdata.inc.php 中)定义为 GLOBAL 变量? IE。类似:
function YQUERY($query)
global $link;
$res = mysqli_query($link,$query);
return $res;
?
3) 我应该(听起来很棒)在任何自定义函数中显式声明一个新连接吗? IE。类似:
function YQUERY($query)
$link = mysqli_connect("host","user","pass","db") or die("Error " . mysqli_error($link));
$res = mysqli_query($link,$query);
return $res;
?
4) 其他建议?
提前致谢
【问题讨论】:
选项 2 会很好。 【参考方案1】:如果您的应用程序中没有那么多连接,GLOBAL $link 选项是最好的。 如果你有这么多的连接,我认为你必须做一个打开连接的功能,以及关闭连接的其他功能,当你在数据库中做某事打开连接时,做你需要做的所有事情,然后关闭连接。
【讨论】:
其实用好的老mysql扩展,每个页面使用的结构是这样的: 每个页面中使用的结构是这样的: ` -- 页面开头:包含 dbdata.inc.php,其中打开了与 db 的连接(代码) -- 页面结尾:包含 dbclose .inc.php,一个关闭连接的文件 ` 我的一个朋友告诉我,明确关闭连接在某种程度上是无用的,除非在页面中执行一些硬维护 cronjobs。我们预计最多有 50 个用户在线,但我预计我们会同时有 25-30 个在线用户正常使用。它是一个类似于 CMS 的应用程序,一个基于聊天、论坛等的角色扮演社区。span> mysql有一个内部程序在不活动的时候关闭连接,但是下一个问题是,你是不是在页面收费的时候使用连接?如果您不再使用该连接,请将其关闭。对于这种页面,我认为您对mysql没有任何问题,但这也取决于您的数据库配置。你可以看到你的有限连接打开目录或你的mysql.exe,在cmd中执行他并写下这个'show variables like "max_connections";'。如果你想改变打开你的目录 mysql 并找到 my.ini 或 my.cnf 并更改行有 max_connections 或添加它。 可以添加:max_connections = 300以上是关于PHP mysql 到 mysqli 迁移问题(自定义函数,程序风格)的主要内容,如果未能解决你的问题,请参考以下文章
如何将我的网站从 mysql 迁移到 mysqli? [复制]