検索
ホームページデータベースmysql チュートリアルPHP プログラマーが犯しやすい MySQL の 11 の間違い

ほとんどの Web アプリケーションにとって、データベースは非常に基本的な部分です。 PHP を使用している場合は、LAMP ファミリの重要なメンバーである MySQL も使用していることでしょう。

多くの初心者にとって、PHP を使用すると、特定の関数を含むコードをわずか数時間で簡単に作成できます。ただし、安定した信頼性の高いデータベースを構築するには、ある程度の時間とスキルが必要です。以下に、私がこれまでに犯した MySQL 関連の最悪の 11 の間違いを示します (そのうちのいくつかは、他の言語/データベースの使用にも反映されています)。

PHP プログラマーが犯しやすい MySQL の 11 の間違い

1. InnoDB の代わりに MyISAM を使用する

MySQL には多くのデータベース エンジンがありますが、最も遭遇する可能性が高いのは MyISAM と InnoDB です。

MySQLはデフォルトでMyISAMを使用します。ただし、非常に単純なデータベースや実験的なデータベースを作成する場合を除き、多くの場合、これは適切な選択ではありません。外部キー制約またはトランザクションはデータの整合性にとって非常に重要ですが、MyISAM はこれらをサポートしていません。また、レコードの挿入や更新を行うとデータテーブル全体がロックされるため、使用量が増えると作業効率が非常に悪くなります。

結論は簡単、InnoDBを使う。

2. PHPのmysql関数を使う

PHPは、それが作成された日から(または、ほとんど違いがないほど)MySQLライブラリ関数を提供しています。 PHP マニュアルには次のように書かれていますが、多くのアプリケーションは依然として mysql_connect、mysql_query、mysql_fetch_assoc などの関数を使用しています。

MySQL v4.1.3 以降を使用している場合は、mysqli 拡張機能を使用することを強くお勧めします。

mysqli (MySQL 拡張機能の拡張バージョン) には次の利点があります:

オプションのオブジェクト指向インターフェイス

SQL インジェクション攻撃を防止し、パフォーマンスを向上させるのに役立つ準備された式

より多くの式とトランザクション処理をサポートします

さらに、複数のデータベース システムをサポートしたい場合は、PDO を検討することもできます。

3. ユーザー入力を処理しない

これは #1 のように言えます: ユーザー入力を決して信頼しないでください。 JavaScript に依存せず、サーバー側の PHP を使用して各文字列を検証します。最も単純な SQL インジェクション攻撃では、次のコードが使用されます:

$username = $_POST["name"];

$password = $_POST["password"];

$sql = “SELECT userid FROM usertable WHERE username = '$username' AND passwd='$password';";

// run query...

usernameフィールドに「admin';–」と入力している限り、ハッキングされます。 対応するSQL文は次のとおりです:

SELECT userid FROM usertable WHERE username='admin';

狡猾なハッカーは管理者としてログインできますが、パスワードフィールドはコメントアウトされているため、パスワードを知る必要はありません。

4. UTF-8は使用されません

私たち米国、英国、オーストラリアでは、英語以外の言語を考慮することはほとんどありません。私たちは誇りを持って「傑作」を完成させましたが、他の場所ではうまく機能しないことがわかりました。

UTF-8 は多くの国際化の問題を解決します。 PHP v6.0 より前では十分にサポートされていませんが、MySQL 文字セットを UTF-8 に設定することは妨げられません。

5. SQL よりも PHP を優先します

MySQL を短期間使用したことがある場合、問題を解決するためにすでに知っている言語を使用する傾向があり、冗長で非効率なコードを作成することになります。たとえば、MySQL に付属の AVG() 関数は使用せず、まずレコードセット内の値を合計し、次に PHP ループを使用して平均を計算します。

また、PHPループ内のSQLクエリにも注目してください。一般に、クエリを実行する方が、結果を反復処理するより効率的です。

したがって、データを分析する際には、SQL の知識を知っておくと非常に役立ちます。

6. データベースクエリが最適化されていない

PHP パフォーマンスの問題の 99% はデータベースが原因であり、たった 1 つの悪い SQL クエリが Web アプリケーションを完全に麻痺させる可能性があります。 MySQL の EXPLAIN ステートメント、Query Profiler、およびその他の多くのツールは、これらの悪質な SELECT を見つけるのに役立ちます。

7. データ型を正しく使用できない

MySQL は、数値、文字列、日付などのデータ型を提供します。時刻を保存する場合は、DATE 型または DATETIME 型を使用します。この時点で INTEGER または STRING 型を使用すると、その型を定義するために INTEGER または STRING を使用できる限り、SQL クエリが非常に複雑になります。

多くの人は、シリアル化された PHP オブジェクトを格納するために文字列を使用するなど、一部のデータ形式を承認なしにカスタマイズする傾向があります。これによりデータベースの管理が容易になる可能性がありますが、MySQL のデータ ストアとしては不十分になり、後で障害が発生する可能性が高くなります。

8. クエリで * を使用します

データテーブルのすべての列のデータを返すために * を使用しないでください。これは怠惰です。必要なデータを抽出する必要があります。すべてのフィールドが必要な場合でも、データ テーブルは必然的に変更されます。

9. インデックスを使用しない、またはインデックスを過剰に使用しない

一般原則は次のとおりです: select ステートメントの where 句で表されるフィールドはインデックスを使用する必要があります。

例えば、数値ID(主キー)とメールアドレスを含むユーザーテーブルがあるとします。ログインするとき、MySQL は電子メールに基づいて正しい ID を検索する必要があります。インデックスが使用されている場合 (ここでは電子メール)、MySQL はより高速な検索アルゴリズムを使用して、電子メールを瞬時にでも見つけることができます。それ以外の場合、MySQL は正しい電子メール アドレスが見つかるまで各レコードを順番にチェックすることしかできません。

各フィールドにインデックスを追加する人もいますが、残念ながら、これらのインデックスは INSERT または UPDATE の実行後に再生成する必要があり、パフォーマンスに影響します。したがって、インデックスは必要な場合にのみ追加してください。

10. バックアップを忘れました

まれではありますが、データベースがクラッシュする危険性があります。ハードドライブが損傷したり、サーバーがクラッシュしたり、Web ホスティングプロバイダーが破産したりする可能性があります。 MySQL データが失われると致命的となるため、自動バックアップが設定されているか、コピーが用意されていることを確認してください。

11. おまけの間違い - 他のデータベースの使用を検討しないでください

PHP 開発者にとって、MySQL は最も広く使用されているデータベース システムかもしれませんが、それが唯一の選択肢ではありません。 PostgreSQL と Firebird が最も有力な候補です。どちらもオープンソースであり、どちらも企業に買収されていません。 Microsoft は SQL Server Express、Oracle は 10g Express を提供しており、どちらもエンタープライズ クラスのデータベースの無料バージョンです。場合によっては、小規模な Web アプリケーションや組み込みアプリケーションの場合、SQLite が有力な代替手段となることがあります。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
複数の単一列インデックスに対して複合インデックスをいつ使用する必要がありますか?複数の単一列インデックスに対して複合インデックスをいつ使用する必要がありますか?Apr 11, 2025 am 12:06 AM

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLでスロークエリを識別して最適化する方法は? (スロークエリログ、Performance_schema)MySQLでスロークエリを識別して最適化する方法は? (スロークエリログ、Performance_schema)Apr 10, 2025 am 09:36 AM

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLおよびSQL:開発者にとって不可欠なスキルMySQLおよびSQL:開発者にとって不可欠なスキルApr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

MySQL非同期マスタースレーブレプリケーションプロセスを説明してください。MySQL非同期マスタースレーブレプリケーションプロセスを説明してください。Apr 10, 2025 am 09:30 AM

MySQL非同期マスタースレーブレプリケーションにより、BINLOGを介したデータの同期が可能になり、読み取りパフォーマンスと高可用性が向上します。 1)マスターサーバーレコードはBinlogに変更されます。 2)スレーブサーバーは、I/Oスレッドを介してBINLOGを読み取ります。 3)サーバーSQLスレッドは、BINLOGを適用してデータを同期させます。

MySQL:簡単な学習のためのシンプルな概念MySQL:簡単な学習のためのシンプルな概念Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

MySQL:ユーザーフレンドリーなデータベースの紹介MySQL:ユーザーフレンドリーなデータベースの紹介Apr 10, 2025 am 09:27 AM

MySQLのインストールと基本操作には、次のものが含まれます。1。mysqlをダウンロードしてインストールし、ルートユーザーパスワードを設定します。 2。sqlコマンドを使用して、createdatabaseやcreateTableなどのデータベースとテーブルを作成します。 3. CRUD操作を実行し、挿入、選択、更新、コマンドを削除します。 4.パフォーマンスを最適化し、複雑なロジックを実装するためのインデックスとストアドプロシージャを作成します。これらの手順を使用すると、MySQLデータベースをゼロから構築および管理できます。

InnoDBバッファープールはどのように機能し、なぜパフォーマンスに不可欠なのですか?InnoDBバッファープールはどのように機能し、なぜパフォーマンスに不可欠なのですか?Apr 09, 2025 am 12:12 AM

Innodbbufferpoolは、データとインデックスページをメモリにロードすることにより、MySQLデータベースのパフォーマンスを向上させます。 1)データページは、ディスクI/Oを削減するためにBufferPoolにロードされます。 2)汚れたページは、定期的にディスクにマークされ、リフレッシュされます。 3)LRUアルゴリズム管理データページの排除。 4)読み出しメカニズムは、可能なデータページを事前にロードします。

MySQL:初心者向けのデータ管理の容易さMySQL:初心者向けのデータ管理の容易さApr 09, 2025 am 12:07 AM

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール