2017-10-22 10 views
0

私の知る限りでは、mysqliのエラー情報を取得する唯一の方法は次のとおりです。CONNECTION変数なしでmysqli_errorを取得する方法はありますか?

$con=mysqli_connect("localhost","my_user","my_password","my_db"); 
///RUN QUERY HERE, and if error: 
$error=mysqli_error($con); 

しかし(私はスマートだと思っ)私の全体のソフトウェアは、複数のデータベースがあるとして、詐欺の情報を取得する機能がプログラムされていますとテーブル。だから、私の質問はもっとこれに似ています。

$query=mysqli_query(CON("USER_DATABASE"),"INSERT INTO users (column) VALUES ("VALUE") "); 
run_query($query); ///In this function I either run the query, 

または失敗したクエリを記録します。ただし、特定のエラーを記録することはできません。

何らかの方法でまだmysqli_error()をキャプチャする方法はありますか? mysqli_error()関数で$ conを使うことなく?おそらく$クエリ変数?

+1

はい、もう1つ - 適切な方法は、mysqliの例外処理を適用することです。 [this](https://phpdelusions.net/mysqli/error_reporting)と[this](https://phpdelusions.net/pdo#errors)を読んでください。 2番目のリンクはPDOに関する理論を提示していますが、実際にはmysqliにも当てはまります。 –

+0

私はこの実行クエリの事を理解していません。 mysqli_queryでは**すでにクエリを実行中**です。 「走る」ことはもう一度意味をなさない。 –

答えて

1

as there are multiple databases and tables.

テーブルの数は関係ありません。

データベースの場合と同様に、アプリケーションごとにデータベースごとに1つの接続変数を設定する必要があります(単純なアプリケーションで複数のデータベースが必要な場合は間違っていると言います)。

どちらの方法でも、接続変数なしでMysqliエラーを取得する方法があります。可能にするには、Mysqliに例外をスローするように指示する必要があります。ただ、だから、あなたのための最も簡単な解決策は、CON()関数静的を作成し、同じ接続インスタンスにそれが呼び出されるたびに返すようになり、このラインに

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

を追加します。

しかし、絶対に必要な場合を除いて、ただ1つのデータベースを使用してアーキテクチャを再考し、より組織化し、静的機能を取り除くためにOOPを使用する必要があります。

+0

フィードバックいただきありがとうございます。うーん、これは正しい方向です。しかし、今はエラー出力が「致命的なエラー:詳細はこちら」となっており、ページは期待通りに消滅します。これらのエラーの詳細を変数に格納して保存できる方法はありますか?その理由は、一部のクエリが失敗する可能性があるにもかかわらず、エラーコードを出力してページを強制的に抹消したくないためです。基本的に私のrun_query($クエリ);関数はif(!$ query){AD ALERT TO ADMIN}を実行するので、何か起こったことがわかります。しかし、$ con変数が存在しないため、エラーは発生しません。 –

+0

まあ、実際には変数は必要ありません。必要なものはすべてPHP上にすでに存在していますので、必要に応じて設定するだけです。私は、これらの問題を説明する記事を書いています。[PHPエラー報告の基礎](https://phpdelusions.net/articles/error_reporting)を読んで、特定の実装に関する質問があれば返事をすることをお勧めします。ちなみに、サイト/サービスのトラフィックは何ですか? –

+0

ありがとうございました!私はerror_logsについて知っていますが、私はすべてのerror_logsを各ディレクトリの新しいログの代わりに1つのログに転送できることを願っています。私がmysqli_errorをvaribaleに配置しようとしていた理由は、私自身にメールで送ることができたからです。あなたの記事をチェックアウトします。ありがとう!私は起業家で、あなたが言うように、アマチュアコーダーです。私はそれに統合された他のいくつかのソフトウェアによってサポートされているフランチャイズのための成功した "企業ポータル"ソフトウェアを構築しました。すべて同じサーバー上に置かれていますが、アプリケーションが大きく異なるため、異なるデータベースが存在します。 –

2

However (thinking I was smart) my whole software is programmed with a function that gets con info, as there are multiple databases and tables. So my queries look more like this.

しないでください。エラー情報を取得するのがより困難になるだけでなく、さらに重要なことです!つまり、アプリケーションがすべてのクエリに対して完全に新しいデータベース接続を作成することを意味します。これにより、あなたのアプリケーションはと大幅にになります。

アプリケーションが実際に複数のデータベースに接続する必要がある場合は、データベースのシンボリック名をパラメータとして渡し、静的変数で使用されたすべてのデータベースへの接続をキャッシュすることを検討してください。

関連する問題