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? [复制]

从 mysql 连接迁移到 mysqli

PHP的10个不应该

PHP mysqli_multi_query 在while循环中的事务

10 件在 PHP 7 中不要做的事情

使用 PDO 问题从 MySQL 检索图像