MySQLデータベースエクステンションを使用してストアドプロシージャを呼び出す
MySQLデータベースエクステンションはMySQLデータベースサーバーにアクセスできるようにするものです。php_mysql.dllを、他のエクステンションと同じようにインストールします。MySQLの関数の詳しい説明は、ここを参照してください。
まず、簡単なストアドプロシージャが必要です。このプロシージャ(proc)は、前に作成したbookstoreテーブルのすべてのフィールドを選択します。
CREATE PROCEDURE proc ( ) BEGIN SELECT * from bookstore; END
次のPHPスクリプトは、MySQLサーバーに接続し、booksデータベースを選択し、procストアドプロシージャ(引数なし)を呼び出し、結果を出力します。
<?php
//Create the connecting to MySQL
$con = mysql_connect('localhost','root','',false,65536);
mysql_select_db('books');
//Call the proc() procedure
$result= mysql_query("CALL proc();")
or die(mysql_error());
//Output the result
while($row = mysql_fetch_row($result))
{
for($i=0;$i<=6;$i++){
echo $row[$i]."<br>";
}
echo "---";
}
//Close the connection
mysql_close($con);
?>
構文$con = mysql_connect('localhost','root','');ではうまくいきません。ストアドプロシージャからPHPに結果セットを返すためには、マルチステートメント接続オプションかマルチ結果オプション(またはその両方)を使う必要があるからです。ルーチンから結果セットが返されなければ、どちらのオプションも必要ありません。
出力は次のようになります。
1---Introduction to PHP---Mark User---3334-4424-334-3433---500-------- 2---DHTML and CSS---Teague Sanders---4545-23-23-23-23232---1500------- 3---Introduction to PHP---Weeling Tom---4334-2323-23233-434---300----- 4---Web design---Weeling Tom---4334-2323-23233-434---600--------- 5---PHP 5---Weeling Tom---444-87-67665-678678---600--------- 6---JavaServer Pages---Tick Own---897-9898-987-099---800---------
次のプロシージャ(total_price)は、bookstoreテーブルのpriceフィールドの総計を計算します。ここでは総計を保持するためにOUTパラメータを使用しています。
CREATE PROCEDURE total_price ( OUT total int) BEGIN SELECT sum(price) into total from bookstore; END
次のPHPスクリプトは、total_priceプロシージャを呼び出し、OUTパラメータtotal(int型)を使用して結果を表示します。
<?php
$con = mysql_connect('localhost','root','',false,65536);
mysql_select_db('books');
//Calling the total_price stored procedure using the @t OUT parameter
$result= mysql_query("CALL total_price(@t);")
or die(mysql_error());
//Listing the result
$rs = mysql_query( 'SELECT @t' );
while($row = mysql_fetch_row($rs))
{
echo 'The total price is = '.$row[0];
}
mysql_close($con);
?>
出力は次のようになります。
The total price is = 4300
