php と mysql の 3 日間パス - 2 日目
gt
lt
mysql
quot
mysql
1. While ループ
このレッスンでは、さらに深く掘り下げて、PHP と MySQL を使用して、いくつかのシンプルで便利なページを作成します。昨日作成したデータベースから始めて、データベース内のデータを表示しますが、少し磨きをかけます。
まず、次のコードを使用してデータベースの内容をクエリします。
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query(" SELECT * FROM 従業員",$db);
echo "
名前 | 役職 | /tr>n";
%s %s | %s | n", $myrow[1], $myrow[2], $myrow[3]);
?>
このアプリにいくつかの新しい機能が追加されたことにお気付きかもしれません。最も明白なのは while() ループです。このループは、データベースに読み取り可能なレコードがまだある限り (mysql_fetch_row() 関数を使用)、そのレコードを変数 $myrow に割り当て、中括弧 ({}) 内の命令を実行することを意味します。ここをよく見てください、この部分はより重要です。
mysql_fetch_row() 関数に注目する必要があります。ここには少し問題があります。配列を返すのですが、配列内のフィールドには配列の添字でアクセスする必要があります。最初のフィールドには 0、2 番目のフィールドには 1 というインデックスが付けられます。これは、特定の複雑なクエリを実行するときに実行するには非常に面倒です。
それでは、ループプロセスを詳しく見てみましょう。プログラムの最初の数行は、レッスン 1 の例ですでに見ました。次に、while() ループで、クエリ結果からレコードを読み取り、そのレコードを配列 $myrow に割り当てます。次に、printf関数を使ってデータの内容を画面に表示します。その後、ループが繰り返し実行され、次のレコードが読み取られて $myrow に割り当てられます。これは、すべてのレコードが読み取られるまで続きます。
while() ループを使用する利点の 1 つは、データベース クエリがレコードを返さなかった場合でも、エラー メッセージを受け取らないことです。ループ ステートメントが最初に実行されるとき、ループ条件は満たされず、データは $myrow に割り当てられず、プログラムは直接実行されます。
しかし、クエリがデータを返さなかった場合、どうやってユーザーにそれを知らせるのでしょうか?おそらく、ユーザーに関連する情報を提供する必要があるでしょう。それは可能です。その方法を見てみましょう。 >>
2. if-else
以下のプログラムをご覧ください。
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query(" SELECT * FROM 従業員",$db);
if ($myrow = mysql_fetch_array($result)) {
echo "
名前< td> | アドレス |
%s %s | %s tr>n", $myrow["first"], $myrow["last"], $myrow["address"]); } while ($myrow = mysql_fetch_array($result)); echo " < /table>n"; } else { echo "申し訳ありません、レコードが見つかりません! "; } ?> このプログラムにはたくさんの新しいコンテンツが含まれています, しかし、すべては非常に簡単です。 1 つ目は mysql_fetch_array() 関数です。この関数は mysql_fetch_row() に非常に似ていますが、1 つの違いがあります。この関数を使用すると、$myrow["first"] などの配列添字の代わりにフィールド名を通じて返されるフィールドにアクセスできます。このようにして、多くの労力を節約できます。さらに、do/while ループと if-else 条件文がプログラムに追加されます。 if-else条件文の意味は、$myrow変数へのレコードの割り当てが成功した場合は続行し、そうでない場合はelse部分にジャンプしてそこで命令を実行するということです。 do/while ループは、前のページで使用した while() ループのバリエーションです。 do/while を使用する必要がある理由は、元の if ステートメントで、クエリによって返された最初のレコードを変数 $myrow に割り当てているためです。この時点で一般的な while ループ (たとえば while ($myrow = mysql_fetch_row($result))) を実行すると、2 番目のレコードが $myrow に割り当てられ、最初のレコードはフラッシュされます。 while ループを使用すると、ループ本体を 1 回実行してからループ条件を決定できるため、クエリ結果にレコードがない場合でも、プログラムが実行されます。 else{} 部分のプログラムのこの部分の実行を確認したい場合は、SQL ステートメントを SELECT * FROM 従業員 WHERE id=6 に変更するか、他の形式に変更して、この部分にレコードが存在しないようにします。 次に、ループ if-else コードを拡張してページのコンテンツを充実させましょう ループ ステートメントの使用方法を学びました。これはより実践的な例ですが、その前に、Web フォーム、クエリ パラメータ文字列、およびフォームの GET メソッドと POST メソッドの処理方法を理解しておく必要があります。これについては、少し前の記事「コンテンツ」で説明しました。この部分では、その記事を読むことができます ここで、クエリ パラメータ文字列を処理する必要があります。ご存知のとおり、パラメータの内容をクエリ パラメータ文字列に書き込む方法は 3 つあります。 2 つ目は、ブラウザのアドレス バーに URL を入力するときにクエリ パラメータを直接追加する方法で、3 つ目は、Web ページのハイパーリンクにクエリ パラメータ文字列を埋め込んで、リンクの内容をスーパーリンクにする方法です。次のように: . ここでは最後の方法を使用します 最初に、従業員をリストするデータベースを再度クエリします。次のプログラムを見てください。そのほとんどはすでに馴染みのあるものです。 ); if ($myrow = mysql_fetch_array($result)) { do { printf("%s %s n", $PATH_INFO, $myrow["id"], $myrow["first "], $myrow["last"]); } while ($myrow = mysql_fetch_array($result)); } else { echo 「申し訳ありませんが、記録が見つかりません。 "; } ?> |