我正在将我开始工作之前创建的遗留网站从旧的Web服务器(PHP 5.3)移动到新的(PHP 5.5)。
本网站使用PEAR的DB.php。我知道它已被弃用,但要将此应用程序升级到MDB2或PDO是一个非常大的项目。
我发现在DB的mysqli.php驱动程序中,它使用了escapeSimple()函数,它实际上只是mysqli_real_escape_string()的包装器。我发现mysqli_real_escape_string()总是返回null或空值。经过一些搜索并查看错误日志后,我发现如果连接为空,mysqli_real_escape_string将执行此操作。但是连接不是空的。为了检查连接是否为空,我将函数更改为如下所示:
function escapeSimple($str)
{
print_r($this->connection);
return mysqli_real_escape_string($this->connection, $str);
}
现在我可以看到连接对象,所有内容都按顺序查看。奇怪的是(对我来说无论如何)是当我在mysqli_real_escape_string之前输入print_r时,IT工作。如果我注释掉print_r,mysqli_real_escape_string将再次返回null。
目前,我已经打印过print_r,从打印到页面,如:
function escapeSimple($str)
{
print_r($this->connection, true);
return mysqli_real_escape_string($this->connection, $str);
}
并且应用程序正在运行,但我知道这是不对的。我花了很多时间寻找这个,并没有提出我的确切症状。请原谅我,如果这已经在其他地方解决了。