【问题标题】:PHP mysql to mysqli migration issues (custom functions, procedural style)PHP mysql 到 mysqli 迁移问题(自定义函数,程序风格)
【发布时间】: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


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 2018-03-22
  • 2011-06-17
  • 2012-11-26
  • 2014-12-28
  • 1970-01-01
  • 2014-07-21
  • 2015-09-23
相关资源
最近更新 更多