早上好!
我计划将我从mysql扩展到mysqli的整个应用程序迁移到mysqli,因为下一个PHP版本将不再支持mysql,我不想在最后几分钟变得愚蠢。
目前,所有页面都包含两个主要内容: 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)是否应该将db连接作为函数参数传递?例如:
function YQUERY($link,$query) {
$res = mysqli_query($link,$query);
return $res;
}2)应该将db连接(在页面开始时定义为包含的dbdata.inc.php )定义为函数内部的全局变量吗?例如:
function YQUERY($query) {
global $link;
$res = mysqli_query($link,$query);
return $res;
}3)我(听起来很棒)应该在任何自定义函数中显式声明一个新连接吗?例如:
function YQUERY($query) {
$link = mysqli_connect("host","user","pass","db") or die("Error " . mysqli_error($link));
$res = mysqli_query($link,$query);
return $res;
}4)其他建议?
提前感谢
发布于 2015-08-05 10:01:36
如果您的应用程序中没有那么多连接,那么全局$link是最好的选择。如果您有这么多连接,我认为您必须执行一个函数来打开连接,以及其他关闭连接的函数,当您在DB中执行某些操作时,打开连接,做您需要做的一切,并关闭连接。
https://stackoverflow.com/questions/31827590
复制相似问题