ホームページ > php教程 > php手册 > 「PHP プログラミング」第 5 章中盤 1: データベース接続

「PHP プログラミング」第 5 章中盤 1: データベース接続

WBOY
リリース: 2016-06-21 09:02:02
オリジナル
1333 人が閲覧しました

 

 

第 5 章 中盤 1: データベース接続

最初の 2 章は PHP 言語に焦点を当てていましたが、ここでアプリケーションの作成を停止して開始します。この章では、MySQL データベースに接続するアプリケーションを作成します。

前の 2 つの章を学習した後、PHP 内部データの処理方法とその方法を学習したはずです。ステートメントと関数を作成します。論理的に言えば、次のステップは、 SQL (構造化クエリ ステートメント) を使用して PHP の外部データを処理する方法を学習することです。しかし、本題に入る前に、基本原則から離れて、しばらくリラックスしましょう。
PHP アプリケーションの開発プロセスを見てみましょう。すべてのアプリは文字通り独自である必要がありますが、すべてのアプリは以前の成果、つまり一連の共通機能に基づいて構築されている必要もあります。これら 2 つのテクニックを組み合わせることをお勧めします。他人が書いた関数をやみくもに使用すると、プログラムから新しい機能を追加できなくなり、また、関数の効率を向上させるために古い関数を変更することもできなくなります。一方で、既存の機能を利用することで、より早くアプリケーションを開発できるようになります。したがって、優れたプログラマーになるためには、これら 2 つの両極端の間で自分自身を把握する必要があります。

注: HTML にまだ慣れていない場合は、今すぐ学習を始めてください。この本は、読者が HTML にすでに精通していることを前提としています。 HTML テーブルとフォームに慣れていない場合は、すぐに混乱してしまうでしょう。

5.1
始まり
新しいプロジェクトを始めるときはいつも、新しい空のディレクトリから始めるのが好きです。ここでは、このディレクトリを phpbook/ch05 と呼びます。もちろん、このディレクトリは Web サーバーのルート ディレクトリに存在する必要があります。第 1 章の手順に従って PHP をインストールした場合、Web サーバーのルート ディレクトリは /usr/local/apache/htdocs。次に、menu.php3 という名前のファイルを作成します。このファイルには、リスト 5.1 などのバックグラウンド管理タスク メニューが含まれています。 。

リスト5.1 menu.php3
php
require('common. inc'); ?>
php affy_header('管理メニュー') ?>

管理メニュー
ol>
li>href="connect.php3"> データベース
接続を作成します/li>
ol> php
affy_footer() ?> ファイル common.incaffy_header 🎜> と affy_footer の定義。これらの関数については、この章の後半で説明します。 5.2
データベース接続の作成

データベース接続の作成 (データベース接続の作成) 接続時に、connect.php3 ファイルが実行され、この章でインストールされた への接続が試行されます。 2 MySQL データベース サーバーを学習します。 リスト5.2 は、ユーザー名 コードビットを使用した connect.php3 ファイルを示しています。 とパスワードcodebits は、MySQL をインストールした後、データベース接続を確立しようとしています。 の時点ではユーザー名が作成されていないため、接続に失敗したと考えられます。ただし、 -- の失敗は、少なくともこの場合 -- は良いことです。なぜなら、それを処理する方法がわかるからです。この質問。図 5.1 は、接続が失敗した後に表示されるエラー メッセージとフォームを示しています。

リスト5.2 connect.php3

ページ 107 -108
リスト 5.2


ページ 108 図 5.1

5.1 接続失敗時のエラーメッセージ表示

データベース接続に失敗した場合、プログラムはエラー メッセージと、ユーザーが root ユーザー パスワードを入力できるフォームを表示します。この章の後半で説明するように、root パスワードを使用すると、 ユーザーという名前のコードビットを作成できます。ここでは、$arr_request 配列に関する部分をスキップしてください。
関数 mysql_connect が呼び出され、接続が失敗すると、通常、関数は次の内容を表示します。情報 :

警告: MySQL 接続失敗: ユーザーのアクセスが拒否されました
: 'codebits@localhost ' (パスワード使用: YES)

大部分のアプリケーション、特に高度にグラフィカルなアプリケーションでは、表示内容を正確に制御する必要があります。関数 mysql_connect の前に (@) シンボルを追加すると、エラー メッセージの表示が抑制されます。
form ステートメントの action 属性は、submit がいつ実行されるかを指定していることに注意してください。 ボタンをクリックすると、connect.php3 ファイルが実行されます。これは再帰プログラムの例であり、PHP ファイル自体を呼び出すことができることを意味します。
再帰プログラミング手法を使用すると、同じトピックに関連するすべてのコードを同じファイルにコンパイルできます。どのような場合に関数を 1 つのファイルに結合するか、またはプログラムを複数のファイルに分割する必要があるかについては、経験に依存します。私の最初のルールは、特定の関数を実装するコードが 100 行を超える場合は、別のファイルを作成するというものです。

5.3
HTMLフォーム情報を取得
パスワードを入力してクリックしても、データベース connect.php3 がデータベース接続を確立するためにフォームの入力値をまだ使用していないため、接続は引き続き失敗します。 。
PHP
エンジンは、各フォーム フィールドを $HTTP_POST_VARS という配列に入れます。上記の例では、配列には usernamepassword の 2 つの要素があります。このプログラムでは、$HTTP_POST_VARS['username'] および $HTTP_POST_VARS['password'] を介してフォーム情報にアクセスできます。
$HTTP_POST_VARS['password'] を使用してフォーム内の情報を取得するのは比較的簡単だと思われます。しかし、まだ隠れた問題がいくつかあります。まず、フォームフィールドの名前 (この例では パスワード) が大文字か小文字か、あるいは両方であるかを確認します。
2 番目の質問の内容は、この例とはほとんど関係ありません。フォーム メソッドに加えて、URL を使用して PHP スクリプトを実行することもできます。例:

http://.../connect.php3?username=root&password=password

ユーザー名とパスワードが URL を介して渡され、疑問符 "? が付いていることがわかります。 はドメイン情報の始まりを示し、”&”はドメインの区切り文字です。幸いなことに、PHP エンジンは URL 行も自動的に分析し、結果を $HTTP_GET_VARS配列内。
問題は (そう思うなら) プログラムが複数の場所から情報を取得できることです -- 配列$HTTP_GET_VARS および配列 $HTTP_POST_VARS これら (およびその他) の問題に対処するための私の解決策は、初期化の取得から始まる $arr_request という配列を作成することです。 2 つの $HTTP 配列からの情報。 common.inc では、次のエンコード行ペア配列 $arr_repuest を使用できます。 > 数値の初期化を実行します。

//
// url ベース (get) とフォーム ベース (post) パラメーターの両方を保持するリクエスト配列を宣言します。 $
arr_request = array();
//
url とフォーム パラメーターを に移動します // フォーム パラメーターは
url を置き換えます。 // パラメータ。さらに、すべてのキーは
変換されます //
If (count($HTTP_GET-VARS)) {
While (list($key, $value) = each ($HTTP_GET_VARS)) {
$
arr_request[strto lower($key)] = $value }
}
if (count($HTTP_POST_VARS)) {
while (list($key, $value) = each ($HTTP_POST_VARS)) {
$
arr_request[strto lower($key)] = $value }
}

common.inc ファイルがすべての PHP スクリプトに含まれている場合であれば、スクリプトがどのように実行されるかを心配する必要はありません。渡されたすべての情報は配列 $arr_request に小文字で保存されます。つまり、$arr_request['username']ユーザー名情報を取得します。
PHP
は、array$HTTP_GET_VARS および array$HTTP_POST_VARS HTML の代替手段を提供します。 URL に基づく フォームと情報は、PHP 変数として直接アクセスできます。たとえば、PHP スクリプトでは、last_name"> として定義されています。 ; のドメイン情報は、$last_namePHP プログラムで直接アクセスできます。 🎜>、同様に URL に基づく情報 (例: http://www.site.com?last_name=join は、$last_name から取得できます。ただし、私は依然として array$arr_request, を使用することを好みます。これは、プログラムに渡されるすべての情報をループするのに非常に便利だからです。情報がスカラーの場合、ループには適していません。たとえば、Shift キーを使用してプログラムが破損しないように、すべてのパラメータ名を大文字に変更するか、エラー検出中にすべての入力パラメータを表示する必要があります。

注: このセクションでは、CGI (共通ゲートウェイ インターフェイス) プロトコルについて簡単に説明するだけです。詳細 詳細については、本書の付録 A"インターネット リソース" にリストされているコンテンツ。
5.4
HTMLフォーム情報
PHP スクリプトからフォーム情報に簡単にアクセスできるようになりました。次は、この情報を使用してデータベースに接続します。最初のステップは、データベースに接続するためのコードを確認することです:
$
id_link = @mysql_connect('localhost'、'アフィ'、'アフィ');このコード行では、ユーザー名とパスワードは両方とも文字列値です。フォーム内の情報を利用するには、値の代わりに変数を使用して、このコード行を変更する必要があります: 'localhost
'、
$username、 $パスワード);
変数を使用するため、初期化する必要があります。次のコードはこの初期化を実行します:

if ( count($
arr_request
) ) {
$username = $arr_request[ 'ユーザー名']; $パスワード = $
arr_request
['パスワード']; } else {
$ユーザー名 = 'phpuser';
$password = 'phpuser';
}

フォーム情報が利用可能な場合、関数
count
の結果は

1
より大きいため、if ステートメントは true 条件の句を実行します。これは $arr_request から始まり、配列からユーザー名とパスワードの情報を取得します。 フォーム情報が存在しない場合でも、ユーザー名とパスワードを文字列値で初期化できます。 3 番目の可能性は、フォームにこれら 2 つのフィールドがあるものの、フォーム情報がない場合です。 connect.php3を呼び出すフォームにユーザー名パスワードがない場合フィールド、それはどうなるでしょうか?その場合、上記のコードは失敗します。このコードはより堅牢にすることができます (つまり、状況下でそのような障害を処理できるようになります)。例: $username = $arr_request['username'] $password = $arr_request
['password' ] ;
if (empty($username)) $username = 'phpuser
'; if (empty($password)) $password = 'phpuser
';

PHP

は初期化されていない配列要素に対して空の文字列を返すため、上記のコードはより適応性があります。配列ではなくスカラーを使用すると、コードが理解しやすくなり、ある意味では効率が向上します。これら 2 つの変数のいずれかが空の場合は、フォームに値が提供されていないことを意味し、デフォルト値が使用されます。
List5.3
は、上記の変更ファイルを含む
connect.php3 を示していますでは、両方の変更の説明をコンテキストで確認できます。 リスト5.3 connect.php3改訂版

ページ 112 - 113

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート