ホームページ > バックエンド開発 > PHPチュートリアル > PHP 開発者によくある MySQL の 10 の間違い Make_PHP チュートリアル

PHP 開発者によくある MySQL の 10 の間違い Make_PHP チュートリアル

WBOY
リリース: 2016-07-21 14:51:39
オリジナル
840 人が閲覧しました

データベースは、ほとんどの 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 passwd='$password';";クエリ...

このようなコードは、ユーザーが「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% はデータベースが原因であり、SQL ステートメントが不適切であると、プログラム全体が非常に遅くなる可能性があります。 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 は、一部の小規模なアプリケーションや組み込みアプリケーションにも適しています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/371770.html技術記事データベースは、ほとんどの Web アプリケーション開発の基礎です。 PHP を使用している場合、ほとんどのデータベースは MYSQL を使用します。これも LAMP アーキテクチャの重要な部分です。 PHP はとても簡単そうに見えますが、初心者でも簡単にできます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート