ホームページ >バックエンド開発 >PHPチュートリアル >take me home country road Web からのデータベースのクエリ: PHP と MySQL
Web からデータベースにクエリを実行する: Web データベース アーキテクチャの仕組み
ユーザーのブラウザが特定の Web ページに対して HTTP リクエストを発行し、そこでフォームが処理のために PHP スクリプト ファイル (results.php など) に送信されます
Web の後サーバーは results.php ページのリクエストを受信し、ファイルを取得して処理のために PHP エンジンに渡します
PHP エンジンはスクリプトの解析を開始します。スクリプトには主に、データベースに接続してクエリを実行するコマンドが含まれています。 PHP は MySQL サーバーへの接続を開始し、適切なクエリをサーバーに送信します。
MySQL サーバーはデータベース クエリ リクエストを受信し、クエリの処理を開始し、クエリ結果を PHP エンジンに返します。
PHP エンジンはスクリプトの実行を完了すると、HTML を Web サーバーに返します。
その後、Web サーバーは HTML をクライアントのブラウザーに返し、ユーザーは応答結果ページを確認できるようになります。
Web からデータベースにクエリを実行するための基本手順
ユーザーからのデータのチェックとフィルタリング まず、ユーザーが検索条件の先頭または末尾に誤って入力した可能性のある空白文字をフィルタリングします。これは、関数 Trim() を使用して実現されます。 ユーザー入力データをわざわざチェックする理由は、ユーザーが異なるインターフェースから入力するため、セキュリティ上の問題が発生する可能性がある複数のインターフェースがデータベースに接続することを防ぐためです。
次に、ユーザーが入力したデータを使用する準備をするときに、ユーザーがデータベースにデータを入力するときに、一部の制御文字も適切にフィルタリングする必要があります。このときに使用される盗まれた関数には、addslashes() が含まれます。関数、stripslashes() 関数、および get_magic_qutoes_gpc() 関数。 addslashes() 関数は、データベース クエリ ステートメントなどの特定の文字の前にバックスラッシュを追加します。 magic_quotes_runtime 設定。実行時にマジック クオートがオフになっている場合は 0 を返し、それ以外の場合は 1 を返します。 htmispecialchars() を使用して、HTML 内の特別な意味を持つ文字をエンコードすることもできます。 htmispecialchars() 関数は、いくつかの事前定義された文字を HTML エンティティに変換します [事前定義された文字は次のとおりです: & (アンパサンド) は & " (二重引用符) ' (一重引用符) になります。 ) は ' < (より小さい) は < > (より大きい) は > になります。
PHP は、MySQL に接続するための関数ライブラリ mysqli を提供します。
PHP で mysqli 関数ライブラリを使用する場合、オブジェクト指向またはプロセス指向の構文を使用できます:
1. オブジェクト指向、@ $db = new mysqli('hostname','username','password','dbname) '); オブジェクトを返します
2. プロセス指向: @ $db = mysqli_connect('hostname','username','password','dbname'); データベース接続を表すリソースを返します。メソッドを使用する場合、このリソースを mysqli の他のすべての関数に渡す必要があります。これは処理関数とよく似ています。mysqli のほとんどの関数にはオブジェクト指向インターフェイスと手続き型インターフェイスがあります。この 2 つの違いは、手続き型バージョンの関数名が mysqli_ で始まり、mysqli_connect() によって取得されるリソース ハンドルを必要とすることです。渡される関数。 データ結合機能は、mysqli オブジェクトのコンストラクターによって作成されるため、このルールの例外です。したがって、接続しようとするときにチェックが必要です。mysqli_connect_errno() 関数は、接続エラーが発生した場合はエラー番号を返し、成功した場合は 0 を返します。最初のコードが含まれています。これにより、エラーを適切に、または例外を通じて処理できるようになります。さらに、MySQK にはデータベースへの同時接続数に一定の制限があります。 MySQLi パラメータ max_connections は、同時接続の数を決定します。このパラメータと関連する Apache パラメータ MaxClients の機能は、新しい接続要求を拒否するようにサーバーに指示することにより、システムがビジー状態またはシステム リソースが要求されたり使用されたりしないようにすることです。システムが麻痺したとき。 Apache で MaxClients パラメータを設定するには、システムの httpd.conf ファイルを編集します。 MySQLi の max_connections パラメータを設定するには、my.conf ファイルを編集します。
使用するデータベースを選択します。MySQL コマンドラインで use dbname; コマンドを使用します。PHP では、$db->select_db(dbname); または mysqli_select_db(db_resource,dbname) を使用できます。
データベースのクエリ データベース クエリを実行するには、まず $query = "select * from user"; を作成し、次に $result = $db->query($query); を実行する必要があります。 ($db,$ query); オブジェクト指向バージョンは結果オブジェクトを返します。手続き型バージョンは結果リソースを返します。メソッドに関係なく、結果は後で使用できるように $result 変数に保存されます。関数の実行に失敗した場合は false が返されます。
クエリ結果を取得する さまざまな関数をさまざまな方法で使用して、結果オブジェクトまたは識別子からクエリ結果を取得します。これは、クエリによって返された行にアクセスするための鍵です。
通常、結果セット内の行数を取得し、mysqli_fetch_assoc() 関数を使用する必要があります。
行数を返します: $num_results = $result->num_rows; (行数はオブジェクトの num_rows メンバー変数に格納されます) または $num_results = mysqli_num_rows($result);
その後、ループを使用して走査します。各行を呼び出し、ループ内で $row = $result->fetch_assoc(); または $row = mysqli_fetch_assoc($result); を呼び出します。 行がオブジェクトとして返される場合、各キーワードは属性名であり、各値は属性内の対応する値です。リソースとして返される場合は、配列が返されます。
結果識別子から結果を取得する他の方法もあります。たとえば、 $row = $result->fecth_row($result); または $row = mysqli_fetch_row($result); を使用して結果を列挙に戻します。 array ; $row = $result->fecth_object(); または $row = mysqli_fecth_object($result); を使用することもできます。
最初に結果セットを解放します: $result->free(); または mysqli_free_result($result); 次に、データベース接続を閉じます: $db->close() または mysqli_close($db);つまり、スクリプトの実行が終了すると自動的に閉じられるため、これは必要ありません。
Web からデータベースにクエリを実行する: プリペアド ステートメントを使用する
mysqli 関数ライブラリは、プリペアド ステートメントの使用をサポートしています。異なるデータを使用して同じクエリを多数実行する際の速度を向上させることができ、また、SQL インジェクション スタイルの攻撃から保護することもできます。プリペアド ステートメントの基本的な考え方は、実行する必要があるクエリ テンプレートを MySQL に送信することです。 . を作成し、同じ準備済みステートメントに大量の同じデータを送信できます。この機能は、通常、次の手順を使用します。例として挿入します: $query = "insert into uservalues(?,?,?,?)"
2. プリペアドステートメントを使用して、実際の処理を完了するために必要なリソースを作成します $stmt = $ db->prepare($query); または mysqli_stmt_prepare($query);
3. $stmt->bind_param("sssd",$str1,$str3,$str3,$int4) または mysqli_stmt_bind_param("sssd)" を呼び出します。 " ,$str1,$str3,$str3,$int4) は、どの変数を疑問符で置き換えるべきかを PHP に指示します。最初のパラメーターはフォーマット文字列で、その後に置き換えられる変数が続きます。
3. $stmt-> を呼び出します。 ;execute() または mysqli_stmt_execute() 関数は、このクエリ ステートメントを実際に実行します
選択タイプのクエリの場合、$stmt->bind_result() または mysqli_stmt_bind_result() 関数を使用して、結果列を呼び出し、$stmt->fetch() または mysqli_stmt_fetch() 関数を呼び出すたびに、結果セットの次の行の値がこれらのバインド変数に入力されます。
PHP の他のインターフェイスを使用して、データベース
PHP は、Oracle、Microsoft SQL Server、PostgreSQL などのさまざまなデータベースに接続する関数をサポートしています。通常、これらのデータベースへの接続とクエリの基本原則は同じであり、必要に応じて個々の関数名が異なる場合があります。 PHP がまだサポートしていない特別なデータベースを使用する場合は、通常の ODBC 関数を使用できます。ODBC は、データベースに接続するための標準です。すべてのデータベースと互換性がある必要があるため、PHP に付属する関数ライブラリ以外のデータベースの特別な関数は使用できません。また、MDB2 などの一部の利用可能なデータベース抽象クラスでは、異なるデータベース タイプに同じ関数名を使用できます。ただし、PEAR MDB2 抽象化レイヤーをインストールするなど、事前に抽象化レイヤーをインストールする必要があります。
上記では、Web からデータベースにクエリを実行するための Take me home country road の PHP と MySQL の記事を紹介しました。これには、Take me home country road の内容も含まれており、PHP チュートリアルに興味のある友人に役立つことを願っています。