ホームページ >バックエンド開発 >PHPチュートリアル >PHP プログラマーが犯しやすい MySQL の 11 の間違い、PHP プログラマーのための mysql_PHP チュートリアル

PHP プログラマーが犯しやすい MySQL の 11 の間違い、PHP プログラマーのための mysql_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:19:09682ブラウズ

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

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

多くの初心者にとって、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["パスワード"];

$sql = “SELECT userid FROM usertable WHERE username=’$username’ ANDpassword=’$password’;”;

// クエリを実行…

ユーザー名フィールドに「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 が有力な代替手段となることがあります。

phpプログラマーの面接の質問、mysqlインジェクションを防ぐ方法

最も一般的に使用される方法は、JS クライアント フィルタリング、PHP サーバー フィルタリング、または PHP センシティブ ワード フィルタリングを使用できます。MYSQL にも対応する機能がありますので、ご自身で確認してください。

phpプログラマーの面接の質問、mysqlインジェクションを防ぐ方法

最も一般的に使用される方法は、JS クライアント フィルタリング、PHP サーバー フィルタリング、または PHP センシティブ ワード フィルタリングを使用できます。MYSQL にも対応する機能がありますので、ご自身で確認してください。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/878808.html技術記事 PHP プログラマーが犯しやすい MySQL の 11 の間違い、php プログラマー mysql ほとんどの Web アプリケーションにとって、データベースは非常に基本的な部分です。 PHP を使用している場合は、おそらく...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。