多くの初心者にとって、PHP を使用すると、特定の関数を含むコードをわずか数時間で簡単に作成できます。ただし、安定した信頼性の高いデータベースを構築するには、ある程度の時間とスキルが必要です。次の記事には、mysql の呼び出し初心者が犯しやすい 11 の間違いがまとめられています。必要な方は参照してください。
はじめに
SQL インジェクション、XSS 攻撃の脆弱性などについて、セキュリティ 部門から警告メールが頻繁に届くことがあります。時折、ハッカーによってハッキングされることもあります。実行が遅すぎるデータベースもあります (経験によれば、これは基本的に インデックス を正しく使用していないことが原因です)。エディターに従って、MYSQL 初心者が犯しやすい 11 の間違いを見てみましょう。
1. InnoDB の代わりに MyISAM を使用する
制約をサポートしていません。さらに、MyISAM はデータの追加または更新時にテーブル全体をロックするため、将来の拡張パフォーマンスに大きな問題が発生します。
解決策は簡単です。InnoDB を使用します。
PHPは最初からMySQL関数ライブラリを提供しています。多くのプログラムは mysql_connect、mysql_query、mysql_fetch_assoc などに依存していますが、
PHP マニュアルでは次のように推奨されています。
使用している MySQL バージョンが 4.1.3 以降の場合は、mysqli 拡張機能を使用することを強くお勧めします。
MySQL の高度な拡張機能である mysqli には、次のような利点があります。
オブジェクト指向インターフェイスを備えています
準備されたステートメント (SQL インジェクション攻撃を効果的に防止し、パフォーマンスを向上させることができる準備されたステートメント)
をサポートします複数のステートメントとトランザクション
さらに、複数のデータベースをサポートしたい場合は、PDO を検討する必要があります。
は次のようにする必要があります:
JAVAscript を信頼しないでください。次のような SQL ステートメントは簡単に攻撃される可能性があります:
$username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // run query...
SELECT userid FROM usertable WHERE username='admin';
英国と米国のユーザーは言語の問題をほとんど考慮しないため、他の国では使用できない製品が多くなります。多くの問題を引き起こす GBK エンコーディングもいくつかあります。
UTF-8 は、国際化に関する多くの問題を解決します。 PHP6 ではこの問題をより完全に解決できますが、MySQL の
文字セット
MySQL を初めて使用する場合は、問題を解決するときに、まず使い慣れた言語の使用を検討することがあります。これにより、無駄が発生し、パフォーマンスが低下する可能性があります。たとえば、平均を計算する場合、MySQL ネイティブの AVG() メソッドは使用されず、代わりに PHP がすべての値をループし、それらを累積して平均を計算します。
SQLクエリ内のPHPループにも注意してください。通常は、すべての結果が取得された後に PHP をループする方が効率的です。
一般に、大量のデータを処理する場合、強力なデータベース手法を使用すると効率が向上します。
6. クエリが最適化されていない
PHP パフォーマンスの問題の 99% はデータベースによって引き起こされます。SQL ステートメントが不適切であると、プログラム全体が非常に遅くなる可能性があります。 MySQL の EXPLAIN ステートメント、Query Profiler、およびその他の多くのツールは、これらの不正な SELECT を見つけるのに役立ちます。
MySQL は、数値、文字列、時間などの一連のデータ型を提供します。日付を保存する場合は、DATE 型または DATETIME 型を使用します。整数または文字列を使用すると、処理がさらに複雑になります。
場合によっては、シリアル化された PHP オブジェクトを格納するために文字列を使用するなど、独自に定義したデータ型を使用したいことがあります。データベースを追加するのは簡単かもしれませんが、そうすると MySQL が扱いにくくなり、後で問題が発生する可能性があります。
8. SELECT クエリで * を使用します
テーブル内のすべてのフィールドを返すには * を使用しないでください。これは非常に遅くなります。必要なデータフィールドを取り出すだけです。すべてのフィールドを削除する必要がある場合は、テーブルを変更する必要がある可能性があります。
9. インデックスの不足または過剰
一般的に、SELECT ステートメントの WHERE の後に現れるフィールドはすべてインデックスを作成する必要があります。
たとえば、users テーブルに数値 ID (主キー) と電子メール アドレスがあるとします。ログイン後、MySQL は電子メールを通じて対応する ID を見つける必要があります。インデックス作成により、MySQL は search アルゴリズムを通じて電子メールを迅速に見つけることができます。インデックスがないと、MySQL はレコードが見つかるまですべてのレコードをチェックする必要があります。
この場合、各フィールドにインデックスを追加することもできますが、その結果、更新または追加するときにインデックスが再作成され、データの量が多いとパフォーマンスの問題が発生します。 。したがって、必須フィールドのみにインデックスを付けます。
10. バックアップしていない
頻繁に起こることではないかもしれませんが、データベースの損傷、ハードドライブの障害、サービスの停止などがデータに壊滅的なダメージを与える可能性があります。したがって、データを自動的にバックアップするか、コピーを保存する必要があります。
11. さらに: 他のデータベースは考慮しないでください
MySQL は PHP で最もよく使用されるデータベースかもしれませんが、唯一の選択肢ではありません。 PostgreSQL と Firebird も競合他社であり、どちらもオープンソースであり、特定の企業によって管理されていません。 Microsoft は SQL Server Express、Oracle は 10g Express を提供しており、これらのエンタープライズ レベルのものには無料バージョンもあります。 SQLite は、一部の小規模なアプリケーションや組み込みアプリケーションにも適しています。
概要
以上がmysql 呼び出しでよくある 11 の間違いのまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。