1

我想使用@ 符号动态调用mysql_connect函数,具体取决于用户是否是管理员(以抑制错误消息):

//User is an admin:
mysql_connect(...)
//User is not an admin:
@mysql_connect(...)

我试过这个:

//MODE_ADMIN is true or false   
private static function mysql_connect(){
    return call_user_func_array((MODE_ADMIN ? '' : '@').'mysql_connect', func_get_args());
}

但我得到这个错误:

call_user_func_array() 期望参数 1 是有效的回调,未找到函数 '@mysql_connect' 或无效的函数名

那么有没有一种简单的方法来动态调用 mysql_connect / @mysql_connect 呢?当然,我可以做一个 if/else 语句并传递每个参数,但这不会很好。

*(我们的数据库离线,硬件故障,网站充满了“mysql太多连接”之类的错误,即使错误报告是E_ALL ^ E_NOTICE ^ E_WARNING ^ E_DEPRECATED)。*

感谢您的提示。

4

2 回答 2

2

我想您正在尝试根据用户访问级别来实现不同的错误/警告级别。例如,您最好使用error_reporting() - 并且永远不要使用@符号 - 因为它使调试几乎不可能。

关于不推荐使用的mysql的通知我更喜欢留下上面的评论

于 2013-08-13T13:51:51.233 回答
2

更通用;你可以做这样的事情并使其适用于所有功能:

<?php

define('IS_ADMIN', true);

class Dispatcher
{
    static public function __callStatic($func, $args)
    {
        if (defined('IS_ADMIN') && IS_ADMIN)
        {
            return @call_user_func_array($func, $args);
        }
        return call_user_func_array($func, $args);
    }
}

// now you can do these:
$mysql = Dispatcher::mysql_connect(...);
$passwd = Dispatcher::file_get_contents('/etc/passwd');
于 2013-08-13T14:06:54.230 回答