PHP プログラマーが犯しやすい MySQL の 11 の間違い_PHP チュートリアル
作者: あおリンクス
ほとんどの 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["password"]; $sql = "ユーザーテーブル WHERE ユーザー名='$ユーザー名' AND パスワード='$パスワード';";クエリ...
ユーザー名フィールドに「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 が有力な代替手段となることがあります

ホット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)

ホットトピック

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPがMySQLに接続した後、ページは空白になり、DIE()関数が失敗する理由。 PHPとMySQLデータベースの間の接続を学習するとき、あなたはしばしばいくつかの混乱することに遭遇します...

CMSはコンテンツマネジメントシステムの略称です。これは、ユーザーが高度な技術知識を必要とせずにデジタル コンテンツを作成、管理、変更できるようにするソフトウェア アプリケーションまたはプラットフォームです。 CMS を使用すると、ユーザーはコンテンツを簡単に作成および整理できます
