我正在将遗留项目从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}}