0

好的,这是简短的操作,我有运行 8 个 MySQL 查询的自定义函数SELECT, UPDATE, DELETE。现在我有严格的标准,所以每次运行查询时我都必须删除错误消息。所以我做了error_reporting(0);,然后下一个查询error_reporting(-1)

        $add_log = "INSERT INTO ac_cand_log
                        (
                            id,
                            action,
                            time
                        )
                      VALUES
                        {$var}";
        $error_reporting = error_reporting();
        error_reporting(0);
        MysqlFns::ExecuteQuery($add_log, "insert");
        error_reporting($error_reporting);

现在我很困惑,因为我运行了这个函数,但由于某种原因它没有产生必要的结果。我相信它会一直运行到最后。切换错误报告级别会导致 php/mysql 发疯吗?

我也只是在它发生之前导入了备份数据库。我知道这发生在我之前,当我刚开始从事这个项目并导入数据库时​​,我无法追踪原因,然后它就停止了。

基本上,我error_reporting(-1);在函数中设置了所有查询,并die;在最后放置了有趣的事情,它显示了严格的标准警告,并且对于每个执行的查询没有其他警告,但是数据库是不完整的,当我刷新页面时,所有记录都与运行查询之前相同。

有人可以为我解决这个掌握吗?

4

3 回答 3

0

你需要这样的功能

function skip($boolean = true) {
    if($boolean) {
         error_reporting(0);
    }
    else {
         error_reporting(E_ALL | E_STRICT);
    }

查询前,

skip(true);
#Query here#

查询后,需要将error_reporting设为默认

skip(false);

如果没有用,您需要显示您的 mysql 函数用于查询

于 2012-08-16T02:59:29.747 回答
0

有了下面这个严格的标准

不应静态调用非静态方法 MysqlFns::ExecuteQuery(),假设 $this 来自第 153 行 /home/xxx/111/222/333/bbb/ccc/myclass.php 中的不兼容上下文

你可以试试

$add_log = "INSERT INTO ac_cand_log
                (
                    id,
                    action,
                    time
                )
              VALUES
                {$var}";
$error_reporting = error_reporting();
error_reporting(0);
$Mysqlfns = new MysqlFns();
$Mysqlfns->ExecuteQuery($add_log, "insert");
error_reporting($error_reporting);

因为 ExecuteQuery() 不是静态方法,所以不能将其称为静态方法。

于 2012-08-16T22:00:22.590 回答
0

首先,忽略错误和警告是一个非常糟糕的主意。如果您不想向用户显示它们,请打开 log_errors 指令并在 PHP.INI 中设置 error_log 路径,同时禁用 display_errors 指令。

如果您出于某种原因想要忽略错误,按功能提供,请尝试以下操作:

set_error_handler(function ($errno, $errstr) { }, E_ALL );
//your code
restore_error_handler();

但更好的方法是修复你的 MySQL 函数——你能给出代码还是只是这个 Strict Standarts 错误?

于 2012-08-16T04:41:00.837 回答