mysql|基本チュートリアル
HTML、PHP、MySQL の間の対話
なぜデータベースを使用するのでしょうか?
ワールド・ワイド・ウェブ(WWW)は単なる情報の場所ではありません。何かあれば、ウェブサイトを作成して世界中の人々と共有してください。ただし、これは簡単な作業ではありません。ウェブサイトがどんどん大きくなると、次の問題に遭遇する可能性があります:
ウェブサイトに含まれているものが多すぎるため、訪問者は欲しいものをすぐに手に入れることができません。この問題は、Web サイトにとってある程度致命的です。
訪問者はあなたに情報を提供したいと考えており、この情報は後で使用できるように保存する必要があります。
上記の 2 つの問題は両方ともデータベースを通じて解決できます。
WWW の世界では、データベースがいたるところにあります。 Yahoo!、Amazon、eBay のような大規模なものから、単純な掲示板のような小規模なものまで、データベースが使用されていることがわかります。データベースはすべての高度なアプリケーションの基盤であるとさえ言えます。
PHP と MYSQL を使用する理由
私の知る限り、主要な商用 Web サイトのデータベースはほぼすべて SQL に基づいています。おそらくこれらの中で最も人気があるのは Oracle です。強力で、もちろん高価です。 SQLはアプリケーションではなく、Structured Query Language(Structured Query Language)の略称で、データベースの操作や問い合わせに使用されます。
近年、多くの企業が「オープンコード」SQL アプリケーションを開発していますが、おそらく最も有名なのは MySQL でしょう。無料なだけではなく、一般的な中小規模のデータベースアプリケーションであれば、Oracleと比べても遜色ないパフォーマンスを発揮します。
ウェブサイト上で MySQL を実行するには、データベースと対話するためのスクリプト言語が必要です。以前は Perl が最も人気がありました。しかし、今では PHP の方が優れているようです。何が違うのかと聞かないでください?? 私は以前は Perl を使用していて問題なく動作していましたが、今では誰もが PHP を使用しているようです。人気の理由は確かにあります。
必要なソフトウェア
この部分の内容は、ChinaByte Network Academyの前回の記事で紹介しています。読者は、「win98 用のローカル PHP 開発のセットアップ」の記事を参照してください。ここではこれ以上の詳細は説明しません。
HTMLとPHP
PHPがどのように動作するかを見てみましょう。次のコードを見てください:
<
<
< /html>
このページがリクエストされると、ブラウザに「Hello, world」が表示されます。
ご覧のとおり、HTMLファイルの中にPHPスクリプトが埋め込まれています。 「 < ? 」で始まり「 ?> 」で終わります。それだけでなく、PHP スクリプトに HTML タグを埋め込むこともできます。
< ?php
print "< body>";
print "Hello, world .";
print "< /body>";
print "< /html>";
?> 2 つの方法は、異なる手段で同じ目的を達成しますが、結果は同じです。ただし、特殊な場合には、いずれかを選択した方が便利な場合があります。
PHP の prints ステートメント
PHP と HTML の間の最も単純な対話は、print ステートメントによって実現されます。
<
print "Hello, world."
?>よく使われる関数はブラウザウィンドウに何らかのテキストを表示するために使用されます。 echo 関数は print と似ていますが、表示する複数の内容を「,」記号で区切ることができます。表示する方が便利です。
数字の出力をフォーマットするために使用される printf 関数もあります。数値は整数または科学的表記法で表示できます。
これらの関数では、括弧の使用法が異なります:
echo には括弧を含めないでください
printf には
printオプションを付ける必要があります
文字列や数値を表示するのは非常に困難です シンプルで、変数名または定数の後に続けるだけですステートメントを印刷します。ただし、配列を表示したい場合は、次のようにも記述しますか:
print $myarray;
出力結果は「Array」となり、PHP は $myarray が配列であることを示します。これは、変数が配列であるかどうかわからない場合に役立ちますが、ここでは配列の内容を確認したいと考えています。
implode 関数を使用すると、配列を文字列に変換できます。これには 2 つのパラメータが含まれており、1 つ目は配列変数名、2 つ目は配列内容の区切り文字です。変換が完了すると、配列の内容が区切り文字でリンクされて文字列が形成されます。
$implodedarray = implode ($myarray, ", ");array_walk 関数を使用して配列を表示することもできます。この関数は、配列の各内容に対して同じ機能操作を実行します。例:
function printelement ($element)
{
print ("$element< p>");
array_walk($myarray, "printelement");
PHP が MySQL にデータを送信する方法
;
次のコードは非常に単純な HTML フォームです。
< form action=submitform.php3名前: < 入力タイプ=テキスト名=最初の名前サイズ= 25>
< = submit> /form>
< /html>
データを submitform.php3 に送信します。この PHP スクリプトは、submitform.php3 のコードを次に示します。
mysql_select_db (dbname);
mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name')
");
印刷(" ");
print ("< p>");
< /body>
< /html>
コードの 3 行目の「ユーザー名」と「パスワード」は、それぞれ MySQL データベースにログインするためのアカウント番号とパスワードを表します。 5行目の「dbname」はMySQLデータベースの名前を表します。 13行目の「tablename」はデータベース内のテーブルの名前です。
送信を押すと、入力した名前が新しいページに表示されます。ブラウザの URL バーをもう一度見てください。その内容は次のようになっているはずです:
…/submitform.php3?first_name=Fred&last_name=Flintstone
フォームの GET メソッドを使用しているため、データは送信された URL を介して送信されます。 submitform.php3 に。明らかに、GET メソッドには制限があります。転送するコンテンツが多い場合、GET は使用できず、POST メソッドのみが使用できます。ただし、どのような方法を使用しても、データ転送が完了すると、PHP はフォーム内の各フィールドの名前 (フォームの name 属性) と同じ変数を自動的に作成します。
PHP 変数はすべてドル記号で始まります。このように、submitform.php3 スクリプトの処理中に、$first_name と $last_name という 2 つの変数が存在し、変数の内容が入力されます。
入力した名前が実際にデータベースに入力されているか確認してみましょう。 MySQL を起動し、mysql> プロンプトで次のように入力します:
mysql> select * from tablename
入力した内容のテーブルを取得できるはずです:
+---------- - -+----------------+
+----------+-------- --- -+
| ルーフェン
+----------------+----------------+
セット内の 1 行 (0.00 秒)
submitform.php3 がどのように機能するかを分析してみましょう:
スクリプトの最初の 2 行は次のとおりです:
mysql_connect (localhost, username, password)
mysql_select_db (dbname);
これらの 2 つの関数呼び出しが使用されます。 MySQL データベースを開きます。 特定のパラメーターの意味は先ほど述べました。
次の行は SQL ステートメントを実行します:
mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name')
"); mysql_query 関数が使用されます。選択したデータベースに対する SQL クエリ。 mysql_query 関数では任意の SQL ステートメントを実行できます。実行する SQL ステートメントは文字列として二重引用符で囲み、その中の変数は一重引用符で囲む必要があります。
注意すべき点: MySQL ステートメントはセミコロン (;) で終わる必要があります。これは PHP コードの行にも当てはまりますが、PHP スクリプト内の MySQL ステートメントにはセミコロンを含めることはできません。つまり、mysql> プロンプトで MySQL コマンドを入力するときは、次のようにセミコロンを追加する必要があります。
INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name');このコマンドは PHP スクリプト内で使用されるため、セミコロンを削除する必要があります。その理由は、SELECT や INSERT などの一部のステートメントはセミコロンの有無にかかわらず機能するためです。ただし、UPDATE など、セミコロンを追加すると機能しないステートメントもあります。トラブルを避けるために、このルールを覚えておいてください。
PHP を使用して MySQL からデータを抽出する方法
このタスクを実行するための別の HTML フォームを作成します:
< body> クエリの内容を入力してください:
< ;
姓: < 入力タイプ=名前=最大長=25>
名: < 入力タイプ=名前=最大長=25>
< body< ?php
mysql_select_ db (データベース名);
if ($first_name == "")
{$first_name = '%';}
if ($last_name == "")
{$last_name = '%';}
$result = mysql_query ( "SELECT * FROM テーブル名
WHERE first_name LIKE '$first_name%'
AND last_name LIKE '$last_name%'
"); print $ row["first_name"];
print $row["last_name"]; while($row = mysql_fetch_array) $result ));
} else {print "申し訳ありませんが、データベースに一致するレコードが見つかりませんでした。 ";}
?>
< /body>
< /html>
フォームに取得したい内容を入力してSUBMITボタンを押すと、新しいページに入ります。一致するすべての検索結果をリストします。このスクリプトが検索タスクを完了する方法を見てみましょう。最初にデータベース接続を確立し、次にデータ テーブルを選択します。次に、次のようなステートメントがいくつかあります:
if ($first_name == "")
{$first_name = '%';}
if ($last_name = = "")
{$last_name = '%';}
これらの行は、フォームの各フィールドが空かどうかを確認するために使用されます。PHP の構文のほとんどは C 言語から派生したものであるため、ここでの等号の使用法に注意してください。も C の場合と同じです。1 つの等号は代入記号であり、2 つの等号は論理的等価性を表します。IF の後の条件が true の場合、後で実行されるステートメントは「{」内に配置されることにも注意してください。と “ } ”、そして各ステートメントの後にはステートメントの終わりを示すセミコロンが続く必要があります
少し理解すると、これらの 2 行がわかるはずです。意味は次のとおりです。「FIRST_NAME」フィールドが空の場合、すべての FIRST_NAME がリストされます。次の 2 つの文も同じ意味を持ちます。
WHERE first_name LIKE '$first_name% " '
AND last_name LIKE '$last_name%'"
");
この行でほとんどの検索作業が完了します。 mysql_query 関数はクエリを完了すると、整数フラグを返します。
クエリは、first_name 列が $first_name 変数と同じであり、last_name 列と $last_name 変数の値も同じであるレコードをすべてのレコードから選択し、それらを一時レコード セットに入れ、返されたレコードを使用します。このレコードセットのマークとしての整数。
if ($row = mysql_fetch_array($result)) {
do {
print $row["first_name"];
print $row["last_name"]; print ("< p>");
} while($row = mysql_fetch_array($result));
} else {print "申し訳ありませんが、データベースに一致するレコードが見つかりませんでした。";}
これは最後のステップは表示部分です。 mysql_fetch_array 関数は、まずクエリ結果の最初の行の内容を抽出し、次に PRINT ステートメントを使用してそれを表示します。この関数のパラメータは、mysql_query 関数によって返される整数フラグです。 mysql_fetch_array が正常に実行されると、レコード セット ポインタは自動的に下に移動し、mysql_fetch_array が再度実行されると、レコードの次の行の内容が取得されます。
配列変数 $row は mysql_fetch_array 関数によって作成され、配列の各コンポーネントがクエリ結果の各フィールドに対応します。
一致するレコードが見つかった場合、変数 $row は空ではなく、中括弧内のステートメントが実行されます。
do {
print $row["first_name"]
print (" " ) ;
print $row["last_name"]
} while($row = mysql_fetch_array($result)); 这是一个 do … while 循环。与 while 循环不同的是,它是先执行一遍循环循环体,然后在检查循环条件是否满足。由于已经知道在纪录集不为空的情况下,肯定至少要把循环体执行一遍,所以应该用到的是 do … while 而不是 while 循环了。在花括号中的就是要执行的循环体:
print $row["fir
PHP 如何从 MySQL 中提取数据
このタスクを実行するための別の HTML フォームを作成します:
< body> クエリの内容を入力してください:
< ;
姓: < 入力タイプ=名前=最大長=25>
名: < 入力タイプ=名前=最大長=25>
< body< ?php
mysql_select_ db (データベース名);
if ($first_name == "")
{$first_name = '%';}
if ($last_name == "")
{$last_name = '%';}
$result = mysql_query ( "SELECT * FROM テーブル名
WHERE first_name LIKE '$first_name%'
AND last_name LIKE '$last_name%'
"); print $ row["first_name"];
print $row["last_name"]; while($row = mysql_fetch_array) $result ));
} else {print "申し訳ありませんが、データベースに一致するレコードが見つかりませんでした。 ";}
?>
< /body>
< /html>
フォームに取得したい内容を入力してSUBMITボタンを押すと、新しいページに入ります。一致するすべての検索結果をリストします。このスクリプトが検索タスクを完了する方法を見てみましょう。最初にデータベース接続を確立し、次にデータ テーブルを選択します。次に、次のようなステートメントがいくつかあります:
if ($first_name == "")
{$first_name = '%';}
if ($last_name = = "")
{$last_name = '%';}
これらの行は、フォームの各フィールドが空かどうかを確認するために使用されます。PHP の構文のほとんどは C 言語から派生したものであるため、ここでの等号の使用法に注意してください。も C の場合と同じです。1 つの等号は代入記号であり、2 つの等号は論理的等価性を表します。IF の後の条件が true の場合、後で実行されるステートメントは「{」内に配置されることにも注意してください。と “ } ”、そして各ステートメントの後にはステートメントの終わりを示すセミコロンが続く必要があります
少し理解すると、これらの 2 行がわかるはずです。意味は次のとおりです。「FIRST_NAME」フィールドが空の場合、すべての FIRST_NAME がリストされます。次の 2 つの文も同じ意味を持ちます。
WHERE first_name LIKE '$first_name% " '
AND last_name LIKE '$last_name%'"
");
この行でほとんどの検索作業が完了します。 mysql_query 関数はクエリを完了すると、整数フラグを返します。
クエリは、first_name 列が $first_name 変数と同じであり、last_name 列と $last_name 変数の値も同じであるレコードをすべてのレコードから選択し、それらを一時レコード セットに入れ、返されたレコードを使用します。このレコードセットのマークとしての整数。
if ($row = mysql_fetch_array($result)) {
do {
print $row["first_name"];
print $row["last_name"]; print ("< p>");
} while($row = mysql_fetch_array($result));
} else {print "申し訳ありませんが、データベースに一致するレコードが見つかりませんでした。";}
これは最後のステップは表示部分です。 mysql_fetch_array 関数は、まずクエリ結果の最初の行の内容を抽出し、次に PRINT ステートメントを使用してそれを表示します。この関数のパラメータは、mysql_query 関数によって返される整数フラグです。 mysql_fetch_array が正常に実行されると、レコード セット ポインタは自動的に下に移動し、mysql_fetch_array が再度実行されると、レコードの次の行の内容が取得されます。
配列変数 $row は mysql_fetch_array 関数によって作成され、配列の各コンポーネントがクエリ結果の各フィールドに対応します。
一致するレコードが見つかった場合、変数 $row は空ではなく、中括弧内のステートメントが実行されます。
do {
print $row["first_name"]
print (" " ) ;
print $row["last_name"]
} while($row = mysql_fetch_array($result)); 这是一个 do … while 循环。与 while 循环不同的是,它是先执行一遍循环循环体,然后在检查循环条件是否满足。由于已经知道在纪录集不为空的情况下,肯定至少要把循环体执行一遍,所以应该用到的是 do … while 而不是 while 循环了。在花括号中的就是要执行的循环体:
print $row["first_name"];
print (" ");
print $row["last_name"];
print ("< p>");
然后就是检查 while 条件是否满足。 Mysql_fetch_array 函数再次被调用,来得到当前纪录的内容。这个过程一直循环,当没有下一条纪录存在时, mysql_fetch_array 返回 false ,循环结束,纪录集也就被完全的遍历了一次。
mysql_fetch_array($result) 返回的数组,不仅可以用字段名来调用,也可以像一般的数组那样,用下标来引用数组的各个分量。这样,上面的代码还可以写成这样:
print $row[0];
print (" ");
print $row[1];
print ("< p>");
我们还可以用 echo 函数来把这四条语句写的紧凑一些:
echo $row[0], " ", $row[1], "< p>";
当没有任何匹配的纪录被找到时,在 $row 中就不会有任何内容,这时就会调用 if 语句的 else 子句了:
else {print " 对不起,再我们的数据库中,没有找到符合的纪录。 ";}
检查查询是否正常工作
你的那些 SELECT , DELETE 或者其它的查询是否能够正常工作呢?这是必须要搞清楚的,并且,千万不要轻易的就下结论。
检查一个 INSERT 查询相对的简单一些:
$result = mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name')
");
if(!$result)
{
echo "< b>INSERT 查询失败 :< /b> ", mysql_error();
exit;
}
但是这个检查的方法对于 SELECT 查询是行不通的,这时,应该这样作:
$selectresult = mysql_query ("SELECT * FROM tablename
WHERE first_name = '$first_name'
AND last_name = '$last_name'
");
if (mysql_num_rows($selectresult) == 1)
{
print "SELECT 查询成功。 ";
}
elseif (mysql_num_rows($selectresult) == 0)
{
print "SELECT 查询失败。 ";
exit;
}
而对于 DELETE 查询,就应该是这样了:
$deleteresult = mysql_query ("DELETE FROM tablename
WHERE first_name = '$first_name'
AND last_name = '$last_name'
");
if (mysql_affected_rows($deleteresult) == 1)
{
print "DELETE 查询成功 ";
}
elseif (mysql_affected_rows($deleteresult) != 1)
{
print "DELETE 查询失败 ";
exit;
}