ホームページ  >  記事  >  バックエンド開発  >  SQL が再びエラーを報告したと誰かが言ったことがありますか?

SQL が再びエラーを報告したと誰かが言ったことがありますか?

WBOY
WBOYオリジナル
2016-06-23 13:18:22938ブラウズ

引用: オンラインで実行されている実際の環境は、明らかに、すべての条件が正常であるかどうかにかかわらず、自分自身の素晴らしいデザインに興奮しているかもしれません。しかし、オンラインに接続すると、時々発作のような状態になり、誰かが「ここがおかしい、あそこがおかしい」と教えてくれます。私は混乱していました、どうして何か問題が起こるのでしょうか?はは、これはほとんどの攻城ライオンの最も一般的な感嘆詞かもしれません。

そこで、今日はエラーを見つける方法と、ユーザーがフィードバックを求めて来るのを待つ代わりに、いくつかのエラーを素早く解決する方法について話します。その頃にはエラーが長すぎる可能性があるためです。私たちがしなければならないのは、間違いを最初に発見し、早い段階で解決し、将来同じような間違いをしないように事後要約を作成することです。間違いはひどいものではないからです。その場合、ひどいのは同じ間違いを繰り返すことです。その場合、あなたと初心者の違いは何ですか?

いくつかのポイント:

1. この記事は主に SQL 関連のエラーを解決します。

2. この記事は PHP のミクロな視点から始まります (なんてことだ、私が PHP 開発に携わっているなんて誰が言ったの?)

3. この記事の解決すべき問題は次のとおりです。 1. 問題の見つけ方

問題 1. 問題の見つけ方

テストについては言うまでもありませんが、テストせずにオンラインに挑戦する人がいるでしょうか。そうだとしたら、あなたは素晴らしいとしか言​​えません!テストは非常に重要な防御線です。一般的に、テストされた機能がオンラインになった後は、バグが多すぎたり、あまり目立ったりすることはありません。さて、テストでは問題が見つからなかったと仮定して、オンラインに行きましょう!実際、オンライン化後は、特に完全な展開システムがない場合には、オンライン化の前後で常にあらゆる種類の奇妙なことが起こるかわかりません。結局のところ、開発者とユーザーは 2 つのレベルの人間です。何が起こるかは誰にもわかりません。私たちのぶら下がっている心は、実際にはユーザーの操作とユーザーのフィードバックに完全に依存しています。いや、それは消極的すぎます!

問題を積極的に特定します。 1. オンラインになった後は、一般ユーザーになるので、基本的な機能を自分で操作する必要があります。ユーザーに渡します! 2. バックアップがなく、実際にユーザーに任せられている場合でも、必要な監視措置を講じる必要があるため、レベルが低すぎます。ここで言う監視とはプログラム レベルでの監視であり、いわゆるエラー報告です。エラー情報を記録するにはどうすればよいですか?エラーが報告されたことはどのようにしてわかりますか?先ほども言いましたが、私はPHPの開発に携わっています。 PHP には error_reporting というエラー ログ記録機能があります。これをオンにしてエラー ログの場所とレベルを指定すると、PHP エラーを記録できます。ただし、オフにしないと、エラー ページの表示がユーザーに表示されます。めちゃくちゃだよ!この記事は SQL エラーについて話しているので、ここには記載すべきではありません。そうです。しかし、私が言いたいのは、SQL がエラーを報告すると、PHP もエラー (通常は警告レベルのエラー) を発行しており、この種のエラーは相関して発生することが多いということです。たとえば、次のステートメントは上記のクエリに依存しています。上記でエラーが報告された場合は、後でも報告されます。 PHP はそれが間違っていることを認識していますが、それは大まかにしかわかっていません。では、SQL の何が間違っているのでしょうか?彼にしか分からないので、こういう記録は彼に任せてください!一般的な原則は、クエリが失敗した場所のエラー ログを記録することです。エラー ログには、主にエラー情報、ファイルの場所 (ソースに遡ってエントリまでファイルを 1 つずつ検索) の情報が記録されます。参照用にエラー情報を記録する PHP コード:

<?php   // 记录sql错误日志    private function logError($msg = "")    {        if (isset($this->_logfile))        {            if (!$msg)            {                if (!mysql_errno())                {                    return;                }                $msg = "mysql_errno: " . mysql_errno() . "\nmysql_error: " . mysql_error();            }            file_put_contents($this->_logfile, '[' . date('Y-m-d H:i:s') . "] $msg\n", FILE_APPEND);            $trace = debug_backtrace();            foreach ($trace as $call)            {                if(empty($call['file']) && empty($call['line']))                {                        continue;                }                file_put_contents($this->_logfile, "{$call['file']} on line {$call['line']}\n", FILE_APPEND);            }            file_put_contents($this->_logfile, "\n", FILE_APPEND);        }    } 

このようにすると、変更するときに、このファイルに示されている場所を確認するだけで、おおよその内容がわかります。は間違っています。そして、何が間違っているのかがわかるでしょう。問題を解決するのは時間の問題だと思います。

2 番目の質問: 問題を解決するにはどうすればよいですか?

実際、前にも言ったように、問題の原因が見つかったので、問題を解決するのは時間の問題です。しかし、結局のところ、皆さんはとても忙しいので、いくつかの解決策を紹介します。 、その悪いコードを解読する時間がありますか?よく発生するエラーは次のとおりです:

1. エラー: [2002] ターゲット コンピューターが積極的に拒否したため、接続できません。分析: データベース接続情報が間違っています。テスト環境接続をオンラインで展開した可能性があります。すぐに復元してください。 注: オンライン マシンがテスト ライブラリに接続できるためにエラーが報告されない場合は、大きな問題があります。

2. エラー: [1146] テーブル 'bbbq' が存在しません。分析: テーブルが存在しません。すぐに確認してください。新しく追加されたテーブルがオンラインで追加されていないか、テーブル名が間違っていますか? 注: 一般に、テストに合格した場合、テーブル名が間違って書かれている可能性は低くなります。

3. エラー: [1054] 'フィールド リスト' に不明な列 'column_x' があります。分析: 指定された列が存在しないか、ライブラリに存在しないか、間違って書き込まれています。すぐに確認してください。 注: 上記と同じです。

4. エラー: [1366] 文字列値が正しくありません: 行 1 の列 'x_name' に 'xA9x96' があります。分析: 文字セットの問題。フィールドで gbk ワードが gb2312 に設定されている場合、この問題が発生します。すぐに元に戻してください。注: コーディングやウェアハウジングに便利な utf-8 エンコードを使用するようにしてください。

5. エラー: [1364] フィールド「pid」にはデフォルト値がありません。分析: 指定されたフィールドにはデフォルト値がありません。取得されるべき値が取得されていないため、一部の不要なフィールドにデータベースのデフォルト値を指定してください。 注: インデックス関係がある場合は、必ず not null オプションを設定してください。そうしないと、インデックスが無効になる可能性があります。

6. エラー: [1366] 行 1 の列 'townId' の整数値が正しくありません。分析: 指定された値はフィールド タイプの要件を満たしていません。データベースに保存する前に、フィールドに必要なタイプを確認してから、対応する強制変換を実行してデータベースに保存します。 注: mysql の一部のバージョンは、型を独自にキャストすることでこの問題に対処できますが、結果は予想を超える可能性があります。

...

待って、私は家族を養わなければならないし、急いで仕事をしなければならないので、後でさらに追加します!フォローアップの質問に関するキーワードのヒント: LOAD DATA INFILE、REPLACE...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。