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() は、153 行目の /home/xxx/111/222/333/bbb/ccc/myclass.php の互換性のないコンテキストからの $this を想定して、静的に呼び出すべきではありません。

あなたが試すことができます

$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 Standards エラーだけを教えてください。

于 2012-08-16T04:41:00.837 に答える