ホームページ >php教程 >php手册 >PHP と MySQL を使用してデータベース主導の Web サイトを構築する (6)

PHP と MySQL を使用してデータベース主導の Web サイトを構築する (6)

WBOY
WBOYオリジナル
2016-06-21 08:58:14907ブラウズ

mysql|データ|データベース

概要

この章では、情報をデータベースに保存し、Web ページに表示する方法を学びます。

(2002-08-29 14:11:25)

------------------------------------- -------------------------------------------------- ----
Wing 著、出典: Linuxaid


第 4 章: PHP を使用して MySQL データベースにアクセスする

この章では、Web 上で PHP を使用する方法を学習します。ページはデータベースに情報を保存し、それを表示します。これまでに、リレーショナル データベース エンジンである MySQL とサーバーサイド スクリプト言語である PHP をインストールし、それらに関する基本的な知識を学びました。この章を学習すると、これら 2 つの新しいツールを使用してデータベース主導の Web サイトを構築する方法が理解できるようになります。

前のパートの復習

先に進む前に、学習の目的を復習することが大切です。私たちのシステムには、スクリプト言語 PHP とデータベース エンジン MySQL という 2 つの強力な新しいツールが導入されました。この 2 つがどのように連携するかを理解することが重要です。

データベース駆動型 Web サイトの本質は、サイトのコンテンツをデータベース内に存在させ、このデータベースを通じて Web ページを動的に生成し、訪問者が標準の Web ブラウザを通じて Web ページを表示できるようにすることです。したがって、システムの一端にはサイトへの訪問者がおり、http://www.yoursite.com/ にアクセスして標準の HTML 形式の Web ページを取得し、それを Web ブラウザに表示します。システムの反対側には、SQL クエリ (コマンド) への応答方法のみを理解する MySQL データベース内の 1 つまたは複数のデータ テーブルにサイトのコンテンツが保存されています。

PHP スクリプト言語は、この 2 つの間の連携の役割を果たします。PHP を使用すると、サイトの外観 (画像やページ デザインを含む) を決定することができます。この時点で、コンテンツはこの「テンプレート」に属します。PHP コードを使用して MySQL データベースに接続し、SQL クエリを使用してデータを取得し、対応する場所に表示できます。ここで使用した SQL クエリは同じです。第 2 章の ジョークデータテーブルを作成する場合も同様です。

これで、訪問者がデータベース駆動型 Web サイトのページにアクセスすると何が起こるかを明確に理解できるはずです。

訪問者の Web ブラウザ このページをリクエストするには、標準の URL を使用します。

Web サーバー ソフトウェア (Apache、IIS など) は、要求されたページが PHP スクリプトであることを認識し、ページ要求に応答する前に PHP プラグインを使用してそれを解釈します。

一部の PHP コマンド (まだ学習していません) は、MySQL データベースに接続し、この Web ページに属するコンテンツをデータベースに要求します。

MySQL データベースが応答し、要求されたコンテンツを PHP スクリプトに送信します。

PHP スクリプトは、コンテンツを 1 つまたは複数の PHP 変数に保存し、使い慣れた echo 関数を使用して Web ページの一部として出力します。

PHP プラグインは処理を完了し、生成された HTML のコピーを Web サーバーに返します。

Web サーバーは、この HTML コピーを Web ブラウザーに送信します。これは標準の HTML ファイルになります。ただし、HTML ファイルから直接取得されるのではなく、PHP プラグインによって提供される出力から取得されます。

PHP を使用した MySQL への接続

Web ページに含まれるコンテンツを MySQL データベースから取得する前に、まず MySQL への接続を確立する方法を知る必要があります。第 2 章では、mysql というプログラムを使用してこのような接続を作成しました。 PHP ではそのようなプログラムは必要ありません。MySQL への接続のサポートは言語に組み込まれています。このような接続を確立するには、次の関数が使用されます:

mysql_connect(

, , );


ここで、 はyou 第 2 章で MySQL サーバーに接続するために使用したユーザー名とパスワード。

PHP の関数は呼び出されると値を返す (出力する) ことが多いことを覚えているかもしれません。思い出させたわけではないので心配しないでください。初めて機能に触れたときに詳しく説明します。ほとんどの関数は、呼び出された後、次回使用するために変数に保存できる値を返します。たとえば、上で紹介した mysql_connect 関数は、確立された接続を識別する番号を返します。この接続を使用するので、この値を保存する必要があります。 MySQL データベースに接続する方法の例を次に示します。

$dbcnx = mysql_connect("localhost", "root", "mypasswd");


MySQL サーバーの場合、上記の関数の 3 つのパラメーターの値が異なる場合があることに注意してください。ここで、mysql_connect が値 (接続識別子と呼びます) を返し、それを変数 $dbcnx に格納していることに注目してください。

MySQL は完全に分散されたソフトウェアであるため、サービスの利用不能、ネットワークの混雑、ユーザー名とパスワードの不一致などの可能性を考慮する必要があります。このような場合、mysql_connect 関数は接続 ID を返すことができません (接続が確立されていないため)。この場合、論理 false が返されます。これにより、if ステートメントを使用して接続状況を処理できるようになります: $dbcnx = @mysql_connect("localhost", "root", "mypasswd");


if (!$dbcnx) {
echo( "

現時点では " .
" データベース サーバーに接続できません。

" );
exit();
}



上記のコード スニペットには 3 つの新しい点が表示されます。まず、mysql_connect 関数の前に @ 記号を追加します。 mysql_connect を含む多くの関数は、失敗後に見苦しいエラー メッセージを表示します。関数名の前に @ 記号を付けると、実行が失敗したときに関数に通知され、独自のわかりやすいエラー メッセージを表示できます。

次に、if ステートメントの条件で、$dbcnx 変数の前に感嘆符が追加されます。この感嘆符は、PHP の「no 演算子」に相当します。つまり、論理的な真実を論理的な虚偽に変え、論理的な虚偽を論理的な真実に変える。このようにして、接続が失敗すると、mysql_connect は論理 false を返し、!$dbcnx は論理 true になり、if ステートメントが実行されます。逆に、接続が成功した場合、$dbcnx に格納されている接続識別子は論理 true (PHP では、ゼロ以外の数値はすべて論理 true とみなされます) になるため、!$dbcnx は論理 false となり、if ステートメントは実行されません。

最後の関数は exit 関数です。これはパラメーターなしで最初に遭遇する関数です。この関数が行うことは、PHP がこのページの読み取りを停止することだけです。データベースに接続できない場合、ほとんどの場合、このページには有用な情報が表示されないため、これはデータベース接続に失敗した場合に適切な応答です。

第 2 章で行ったように、接続が確立された後の次のステップは、操作するデータベースを選択することです。第 2 章で作成したジョーク データベースを使用して作業します。このデータベースは、joks という名前です。 PHP でデータベースを選択するために使用される別の関数:

mysql_select_db("jokes", $dbcnx);


ここでは、接続 ID を示すために $dbcnx 変数を使用していることに注意してください。この関数で使用されます。このパラメータは実際には省略されます。このパラメータを省略すると、関数は最後に開かれた接続を自動的に使用します。この関数は、成功すると論理 true を返し、失敗すると論理 false を返します。慎重に、エラーを処理するために if ステートメントも使用します。


if (! @mysql_select_db("jokes") ) {
echo( "

ジョークが見つかりません" .
"この時点のデータベース。

" );
exit();
}



接続が確立され、選択されたときデータベースを作成したら、データベースに保存されているデータの操作を開始できます。

PHP での SQL クエリの実行

第 2 章では、mysql というプログラムを使用して MySQL データベース サーバーに接続し、SQL クエリ (コマンド) を入力して、クエリ結果がすぐに得られます。 PHP には、mysql_query 関数という同様のメカニズムがあります。

mysql_query(, );


ここで、 は実行する SQL コマンドを含む文字列です。 mysql_select_db と同様、接続 ID パラメータもオプションです。

この関数の戻り値は、発行されたクエリの種類によって異なります。ほとんどの SQL コマンドでは、mysql_query は論理 true または論理 false を返し、実行が成功したかどうかを示します。次の例を参照してください。これは、第 2 章で作成した Jokes データ テーブルの作成に使用されています。


$sql = "CREATE TABLE Jokes ( " .
"ID INT NOT NULL AUTO_INCREMENT PRIMARY) KEY, " .
"JokeText TEXT, " .
"JokeDate DATE NOT NULL " .
")";
if ( mysql_query($sql) ) {
echo( "< P>ジョーク テーブルが正常に作成されました!

");
} else {
echo("

ジョーク テーブルの作成中にエラーが発生しました: " .
mysql_error() . "< ;/P> ;");
}



ここで使用される mysql_error は、MySQL サーバーによって発行された最後のエラー メッセージを文字列の形式で返します。

DELETE、INSERT、および UPDATE (保存されたデータの変更に使用) の場合、MySQL はこのクエリによって影響を受けるデータ行の数を知ることができます。第 2 章で「チキン」という単語を含むすべてのジョークの日付を設定するために使用した次の SQL コマンドを考えてみましょう:


$sql = "UPDATE Jokes SET JokeDate='1990- 04-01 ' " .
"WHERE JokeText LIKE '%chicken%'";
このクエリを実行すると、mysql_affected_rows 関数を使用して、この変更によって影響を受けるデータ行の数を表示できます:
if ( mysql_query ($sql) ) {
echo("

影響を受ける更新 " .
mysql_affected_rows() . " rows.

");
} else {
echo("

更新実行中のエラー: " .
mysql_error() . "

");
}



いくつかの SELECT コマンドがあります。大量の情報を取得するため、PHP はこの情報を処理するメソッドを提供する必要があります。

SELECT 結果セットの処理

ほとんどの SQL クエリでは、mysql_query 関数は論理 true または論理 false のみを返します。 SELECT クエリの場合、これだけでは明らかに十分ではありません。 SELECT クエリはデータベースに保存されているデータを表示するために使用されることを覚えておいてください。 PHP は、クエリが成功したか失敗したかを示すだけでなく、クエリの結果も取得する必要があります。その結果、SELECT クエリを実行すると、mysql_query は「結果セット」を識別する番号を返します。これには、クエリによって返されたすべての行のリストが含まれます。クエリが失敗した場合でも、関数は論理 false を返します。


$result = mysql_query("SELECT JokeText FROM Jokes");
if (!$result) {
echo("

クエリ実行エラー: " .
mysql_error() . "

");
exit();
}



クエリの実行時にエラーが発生しないと仮定すると、上記のコードはジョーク ライブラリに保存されているすべてのジョークのテキストを含む結果セットが配置されます。この場所は変数 $result に保存されます。データベース内のジョークの数に制限がないため、この結果セットは非常に大きくなる可能性があります。

while ループは大量のデータを処理するのに非常に便利な制御ステートメントであると前に述べました。これは、結果セット内のデータ行を 1 つずつ処理するコードの基本形式です。 >

while ( $row = mysql_fetch_array($result) ) {
// 行を処理します...
}



この while の条件これは以前に使用したものとは異なるように見えるため、ここでどのように機能するかを説明する必要があります。まず、この条件を別個のステートメントとして考えることができます:

$row = mysql_fetch_array($result);


mysql_fetch_array 関数は 1 つのパラメーター (この例では storage (in $result 変数) は結果セットを受け取り、結果セット内の次の行をデータとして返します。配列の概念にまだ慣れていない場合でも、心配する必要はありません。以下で詳しく説明します。この結果セットに他のデータ行がない場合、mysql_fetch_array は論理 false を返します。

さて、上記のステートメントは $row 変数に値を定義し、同時にステートメント全体も同じ値を取得します。これが、while ループの条件でこのステートメントを使用する理由です。結果セットに複数の行がある場合、while ループは条件が論理的に false になるまでループを実行し続けるからです。 $row が次の行の値を取得するたびに、残るのはループ内の $row 変数から対応する値を取得する方法だけです。

結果セット内の行は配列として記述されます。配列は、複数の値を含めることができる特殊なタイプの変数です。変数を値のコンテナーと考え​​ると、配列は間隔を持つコンテナーと考え​​ることができ、各間隔に個別の値を格納できます。データ行の場合、この間隔はデータ テーブルの列名に基づいて名前が付けられます。 $row が結果セット内の行の場合、 $row["JokeText"] はその行の JokeText 列の値になります。したがって、データベースにあるジョークのテキストを表示したい場合、while ループは次のようになります:


while ( $row = mysql_fetch_array($result) ) {
echo ("< ;P>" . $row["JokeText"] . "

");
}



最後に、要約として、これは完全な PHP データベースに接続し、データベース内のすべてのジョークのテキストを取得し、HTML で表示するために使用される Web ページのコード:




ジョークのリスト
</HEAD>


// データベースサーバーに接続します
$dbcnx = @mysql_connect("localhost",
"root ", "mypasswd");
if (!$dbcnx) {
echo( "

gt;現在、「 .
」データベース サーバーに接続できません。

" );
exit();
}

// ジョーク データベースを選択します
if (! @mysql_select_db("jokes") ) {
echo( "

ジョーク「 .
"現時点ではデータベースが見つかりません。

" );
exit();
}

?>



// すべてのジョークのテキストをリクエストします
$result = mysql_query (
「ジョークからジョークテキストを選択」);
if (!$result) {
echo("

gt;クエリ実行エラー: " .
mysql_error() . " exit();
}

// 各ジョークのテキストを段落に表示します
while ( $row = mysql_fetch_array($result) ) {
echo("

" . $row["JokeText"] . "

");
}
?>






方向データ据库中插入据

在这一节里,我们会看到我们会 このツールをどのように利用するか私たちのサイトのユーザーが自分自身の笑いのメッセージをデータベースに追加したことを確認してください。もしあなたが挑戦することを喜んでいるのであれば、このプロジェクトはこのサイトで少しだけ行われていると考えられます。

もし私たちが新しい笑い文を入力できるようにしたい場合は、最初に表が必要です、それがこの表です。单的代番号:



ここにジョークを入力してください:








正如我们上面看到那样,这个表单在(表の ACTION プロパティで $PHP_SELF 量を使用したため) 取引時に同じ页面にロードされますが、再ロード時のリクエストには 2 つの量が含まれています。最初は $joketext で、これはテキストフィールドでの入力です。の笑言葉の正文、もう 1 つは $submitjoke です。この量の値は "SUBMIT" で始まり、笑言葉が交換されたことを示すために使用されます。 mysql_query を使用して INSERT メッセージを実行します。このメッセージには既に提案された $joketext 变量の値が含まれます:


if ("SUBMIT" == $submitjoke) {
$sql = "INSERT INTO ジョーク SET " .
"JokeText='$joketext', " .
"JokeDate=CURDATE()";
if (mysql_query($sql)) {
echo("

gt ;あなたのジョークが追加されました。

");
} else {
echo("

gt;送信されたジョークの追加エラー: " .
mysql_error() . " }
}



すべての内容の中に SQL コードの中に新しいものが 1 つだけ表示されています。ここでは私が使用している MySQL 関数数CURDATE(実際、MySQL にはそのような関数が多数ありますが、完全な関数が得られるのは、他のユーザーが使用するときにのみ使用されるためです。





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。