将MYSQL迁移到MYSQLi:输出缓冲区处理程序中的DB函数无法正常工作

时间:2014-09-27 13:21:29

标签: php mysql mysqli

我正在将遗留项目从mysql_迁移到mysqli_

代码中的某处有

ob_start("do_output"); 

在我的

function do_output($output) { 
     [...]
     querydb(' .... ');
     [...]
} 

其中querydb()看起来像是

function querydb($query,$dieonerrors=true,$ec=false) {
    global $db_conn, $db_type, $debuginfos, $stat_qcount;
    ...

现在,当我使用调试器$db_conn进行检查时,null$db_conn = mysqli_connect()。它早先用null初始化。并且连接在运行期间正在运行。但是在输出缓冲区处理程序内部变为mysql_*。怎么会这样?使用<?php $db_type = "mysqli"; $db_host = "localhost"; $db_database = "test"; $db_user = "root"; $db_pass = "root"; initdb(); querydb("SHOW TABLES"); ob_start('do_output'); querydb("SHOW TABLES"); echo "foobar"; function initdb($persistent = false) { global $db_host, $db_user, $db_pass, $db_database, $db_type, $db_conn; $db_conn = mysqli_connect($db_host, $db_user, $db_pass); mysqli_query($db_conn, "USE $db_database"); return $db_conn; } function querydb($query, $dieonerrors = true, $ec = false) { global $db_conn, $db_type, $debuginfos, $stat_qcount; $result = mysqli_query($db_conn, $query); if (!$result) { if ($dieonerrors) { die('error'); } } return $result; } function do_output($output) { querydb('SHOW TABLES'); // if I comment this I get an output 'foo' return "foo"; } 它正在运作。

编辑以下是演示此问题的完整代码:

/var/log/apache2/error.log

我没有输出,PHP Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/foo/bar/test.php on line 32 中的错误是

{{1}}

0 个答案:

没有答案