序文 セキュリティ部門からSQLインジェクションやXSS攻撃の脆弱性などに関する警告メールを頻繁に受け取ったり、時にはハッカーにコンピュータがハッキングされたりすることがあります。イライラしませんか?データベースの実行が遅すぎます (経験上、これは基本的にインデックスの誤った使用が原因です)。エディターに従って、MYSQL 初心者が犯す 11 の一般的な間違いを見てみましょう。 1. InnoDBの代わりにMyISAMを使用する MySQLには多くのデータベースエンジンがありますが、一般的にはMyISAMとInnoDBが使われます。 デフォルトでは MyISAM が使用されます。しかし、非常に単純なデータベースをセットアップしている場合や、単に実験している場合を除いて、ほとんどの場合、これは間違った選択です。 MyISAM は、データの整合性を確保するための本質である外部キー制約をサポートしていません。さらに、MyISAM はデータの追加や更新時にテーブル全体をロックするため、将来の拡張パフォーマンスに大きな問題が生じます。 解決策は簡単です。InnoDB を使用します。 2. PHPのmysqlメソッドを使用する PHP は当初から MySQL 関数ライブラリを提供してきました。多くのプログラムはmysql_connect、mysql_query、mysql_fetch_assocなどに依存していますが、 PHP マニュアルでは次のように提案されています: MySQL バージョン 4.1.3 以降を使用している場合は、mysqli 拡張機能を使用することを強くお勧めします。 mysqli (MySQL Advanced Extensions) にはいくつかの利点があります。 オブジェクト指向インターフェースを持つ 準備されたステートメント(前処理されたステートメントは、SQL インジェクション攻撃を効果的に防止し、パフォーマンスを向上させることができます) 複数のステートメントとトランザクションをサポート さらに、複数のデータベースをサポートする場合は、PDO を検討する必要があります。 3. ユーザー入力をフィルタリングしない 正しくは、「ユーザー入力を決して信頼しないでください」です。各入力情報を検証およびフィルタリングするにはバックエンド PHP を使用し、JAVAscript を信頼しないでください。次のような SQL ステートメントは簡単に脆弱になります。 $username = $_POST["名前"]; $password = $_POST["パスワード"]; $sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // クエリを実行... ユーザーがこのコードに「admin';」と入力すると、次のコードと同等になります。 usertable から userid を選択します。WHERE username='admin'; この方法では、侵入者はパスワードを入力せずに管理者としてログインできます。 4. UTF-8を使用していない 英国と米国のユーザーは言語の問題をほとんど考慮しないため、多くの製品が他の場所で使用できなくなります。 GBK でエンコードされたものもいくつかありますが、これもまた多くの問題を引き起こします。 UTF-8 は多くの国際化の問題を解決します。 PHP6 ではこの問題をより完璧に解決できますが、MySQL の文字セットを UTF-8 に設定することを妨げるものではありません。 5. SQLを使うべきところではPHPを使う MySQL を初めて使用する場合は、使い慣れた言語を使用して問題を解決することを検討する場合があります。これにより、無駄が生じ、パフォーマンスが低下する可能性があります。たとえば、平均を計算する場合、ネイティブの MySQL AVG() メソッドは使用されません。代わりに、PHP を使用してすべての値をループし、それらを合計して平均を計算します。 また、SQL クエリ内の PHP ループにも注意してください。通常、すべての結果が取得されたら、PHP で結果をループする方が効率的です。 一般的に、大量のデータを処理する際に強力なデータベース メソッドを使用すると、効率が向上します。 6. クエリを最適化しない PHP のパフォーマンスの問題の 99% はデータベースが原因です。不適切な SQL ステートメントにより、プログラム全体が非常に遅くなる可能性があります。 MySQL の EXPLAIN ステートメント、クエリ プロファイラ、その他多くのツールは、問題のある SELECT を見つけるのに役立ちます。 7. 間違ったデータ型の使用 MySQL は、数値、文字列、時刻などの一連のデータ型を提供します。日付を保存する場合は、DATE または DATETIME 型を使用します。整数または文字列を使用すると、状況が複雑になります。 場合によっては、シリアル化された PHP オブジェクトを文字列に格納する場合など、独自のデータ型を使用する必要があることがあります。データベースを追加するのは簡単かもしれませんが、MySQL は扱いにくくなり、後で問題が発生する可能性があります。 8. SELECTクエリで*を使用する テーブル内のすべてのフィールドを返すために * を使用しないでください。非常に遅くなります。必要なデータ フィールドのみを抽出する必要があります。すべてのフィールドを削除する必要がある場合は、テーブルを変更する必要がある可能性があります。 9. インデックス不足またはインデックス過剰 一般的に、SELECT ステートメントの WHERE の後に表示されるすべてのフィールドにインデックスを付ける必要があります。 たとえば、ユーザー テーブルに数値 ID (主キー) と電子メール アドレスがあるとします。ログイン後、MySQL は電子メールを通じて対応する ID を見つけるはずです。インデックスを使用すると、MySQL は検索アルゴリズムを通じて電子メールをすばやく見つけることができます。インデックスがない場合、MySQL はインデックスが見つかるまですべてのレコードをチェックする必要があります。 この場合、各フィールドにインデックスを追加したい場合がありますが、これを行うと、更新または追加時にインデックスがやり直され、データ量が多い場合にパフォーマンスの問題が発生します。したがって、必要なフィールドのみにインデックスを付けます。 10. バックアップをとらない 頻繁に発生することはないかもしれませんが、データベースの破損、ハード ドライブの障害、サービスの停止などにより、データに壊滅的な損害が発生する可能性があります。したがって、常にデータを自動的にバックアップするか、コピーを保存するようにしてください。 11. さらに: 他のデータベースを考慮しない MySQL は PHP で最も一般的に使用されるデータベースかもしれませんが、唯一の選択肢ではありません。 PostgreSQL と Firebird も競合相手ですが、どちらもオープンソースであり、特定の企業によって管理されていません。 Microsoft は SQL Server Express を提供し、Oracle は 10g Express を提供しており、これらのエンタープライズ レベルのものには無料バージョンもあります。 SQLite は、一部の小規模なアプリケーションや組み込みアプリケーションにも適しています。 要約する 上記がこの記事の全内容です。この記事の内容が、MySQL の学習や使用に携わる皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してご連絡ください。 以下もご興味があるかもしれません:
|
>>: Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法
データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...
序文この友人がどれくらいDockerを使っていなかったのかは分かりませんが、突然Dockerコマンド...
まず設定ファイルがどこにあるか調べる nginx.confはどこにありますかこれらのディレクトリを調...
同時アクセスの場合、非反復読み取りやその他の読み取り現象が発生する可能性があります。高い同時実行性に...
水平方向では、行の配置を左、中央、右に設定できます。基本的な構文<TR ALIGN="...
1. MySQL ダウンロード アドレス。 http://ftp.ntu.edu.tw/MySQL...
通常、vue プロジェクトではルーティングを使用します。vue-router は vue.js の公...
ここで、次のような項目をフォームに追加したいとします: 現在いる都市を参照します。ここで私たちが話し...
この記事で説明する等幅レイアウトでは、純粋な CSS を使用して、要素の幅を手動で設定することなく、...
この記事では、MySQL の文字列インターセプト関連の機能を紹介します。具体的な内容は以下のとおりで...
背景CVE-2021-21972 VMware vCenter における認証されていないコマンド実行...
1. 仮想環境はプロジェクトに従い、単一のプロジェクト用の仮想環境を作成します(Python 3.4...
1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...
目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...
実験環境:物理マシン Windows 10 x64物理NIC情報IPv4 アドレス: 192.168...