【发布时间】: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 会很好。
标签: php mysql function mysqli database-connection