PHP 開発者が犯す MySQL のよくある間違い
データベースは、ほとんどの WEB アプリケーション開発の基礎です。 PHP を使用している場合、ほとんどのデータベースは MYSQL を使用します。これも LAMP アーキテクチャの重要な部分です。
PHP は非常に単純なようで、初心者でも数時間以内に関数を書き始めることができます。ただし、安定した信頼性の高いデータベースを構築するには時間と経験がかかります。以下にそのような経験をいくつか挙げます。MYSQL に限らず、他のデータベースも参考にすることができます。
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 の高度な拡張機能には、次のような利点があります。
オブジェクト指向インターフェイスを備えています
プリペアド ステートメント (SQL の実行を効果的に防止できるプリペアド ステートメント)
複数のステートメントとトランザクションをサポート
さらに、複数のデータベースをサポートしたい場合は、PDO を検討する必要があります。
3. ユーザー入力をフィルタリングしない
ユーザー入力を決して信頼しないでください。バックエンド PHP を使用して各入力情報を検証およびフィルタリングします。JAVAscript は信頼しません。次のような SQL ステートメントは簡単に攻撃されます:
$username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // run query...
ユーザーが「admin';」と入力した場合、次のようなコードは次と同等です:
SELECT userid FROM usertable 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% は、データベースが原因で発生する可能性があります。 MySQL の EXPLAIN ステートメント、Query Profiler、およびその他の多くのツールは、不正な SELECT を見つけるのに役立ちます。
7. 間違ったデータ型の使用
MySQL は、数値、文字列、時間などの一連のデータ型を提供します。日付を保存する場合は、DATE 型または DATETIME 型を使用します。整数または文字列を使用すると、処理がさらに複雑になります。
シリアル化された PHP オブジェクトを格納するために文字列を使用するなど、独自のデータ型を使用したい場合があります。データベースを追加するのは簡単かもしれませんが、MySQL は扱いにくくなり、後で問題が発生する可能性があります。
8. SELECT クエリで * を使用します。
テーブル内のすべてのフィールドを返すために * を使用しないでください。非常に時間がかかります。必要なデータフィールドを取り出すだけです。すべてのフィールドを削除する必要がある場合は、テーブルを変更する必要がある可能性があります。
9. インデックス不足またはインデックス過剰
一般に、SELECT ステートメントの WHERE の後に出現するすべてのフィールドにインデックスを付ける必要があります。
たとえば、users テーブルに数値 ID (主キー) と電子メール アドレスがあるとします。ログイン後、MySQL は電子メールを通じて対応する ID を見つける必要があります。インデックス作成により、MySQL は検索アルゴリズムを通じて電子メールを迅速に見つけることができます。インデックスがないと、MySQL はレコードが見つかるまですべてのレコードをチェックする必要があります。
この場合、各フィールドにインデックスを追加することもできますが、その結果、データの量が多い場合には、更新または追加するときにインデックスが再作成されます。パフォーマンスの問題があります。したがって、必須フィールドのみにインデックスを付けます。
10. バックアップが行われていない
頻繁に起こることではありませんが、データベースの損傷、ハードドライブの障害、サービスのシャットダウンなどにより、データに壊滅的な損傷が発生します。したがって、データを自動的にバックアップするか、コピーを保存するようにする必要があります。
11. さらに: 他のデータベースは考慮されません
MySQL は PHP で最も一般的に使用されるデータベースかもしれませんが、それが唯一の選択肢ではありません。 PostgreSQL と Firebird も競合他社です。どちらもオープンソースであり、特定の企業によって管理されていません。
Microsoft は SQL Server Express、Oracle は 10g Express を提供しており、これらのエンタープライズ レベルのものには無料バージョンもあります。 SQLite は、一部の小規模なアプリケーションや組み込みアプリケーションにも適しています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします
