MySQLエクステンションを使用してストアドファンクションを呼び出す
ここでは、関数の呼び出し例として、次の簡単なストアドファンクションを使います。
CREATE FUNCTION simple_operation (price int) RETURNS int(11) RETURN price*1000
simple_operation
関数は、整数の引数を取り、簡単な計算を行って整数の結果を返します。
<?php $con = mysql_connect('localhost','root','',false,65536); mysql_select_db('books'); //Calling the simple_operation function $rs = mysql_query( 'SELECT simple_operation(5)' ); while($row = mysql_fetch_row($rs)) { echo 'The total price is = '.$row[0]; } mysql_close($con); ?>
出力は次のようになります。
The total price is = 5000
MySQLiを使用してストアドプロシージャを呼び出す
MySQLi(MySQL Improved)エクステンションは、MySQL 4.1以上で提供される機能を利用できるようにするものです。MySQLiエクステンションのDLL(php_mysqli.dll)はデフォルトでは有効にならないので、php.iniの中で有効にする必要があります。MySQLiエクステンションの機能については、このリンクを参考にしてください。
次の例では、前に説明した2つのプロシージャproc()
とtotal_price()
を使います。MySQLiエクステンションを使用してストアドプロシージャを呼び出す構文は次のとおりです。
$mysqli->query( 'CALL proc()' );
次のPHPスクリプトは、proc()
ストアドプロシージャを呼び出し、結果を出力します。
<?php //Connecting to the books database $mysqli = new mysqli('localhost', 'root', '', 'books'); //Calling the proc() procedure $rs = $mysqli->query( 'CALL proc()' ); while($row = $rs->fetch_object()) { print_r($row); echo "<br />"; } ?>
出力は次のようになります。
stdClass Object ( [id] => 1 [book] => Introduction to PHP [author] => Mark User [isbn] => 3334-4424-334-3433 [price] => 500 ) stdClass Object ( [id] => 2 [book] => DHTML and CSS [author] => Teague Sanders [isbn] => 4545-23-23-23-23232 [price] => 1500 ) stdClass Object ( [id] => 3 [book] => Introduction to PHP [author] => Weeling Tom [isbn] => 4334-2323-23233-434 [price] => 300 ) stdClass Object ( [id] => 4 [book] => Web design [author] => Weeling Tom [isbn] => 4334-2323-23233-434 [price] => 600 ) stdClass Object ( [id] => 5 [book] => PHP 5 [author] => Weeling Tom [isbn] => 444-87-67665-678678 [price] => 600 ) stdClass Object ( [id] => 6 [book] => JavaServer Pages [author] => Tick Own [isbn] => 897-9898-987-099 [price] => 800 )
同様に、次の例では、total_price()
ストアドプロシージャを呼び出し、結果を出力します。
<?php $mysqli = new mysqli('localhost', 'root', '', 'books'); $rs = $mysqli->query( 'CALL total_price(@t)' ); $rs = $mysqli->query( 'SELECT @t' ); while($row = $rs->fetch_object()) { print_r($row); echo "<br />"; } ?>
この例の出力は次のようになります。
The total price : stdClass Object ( [@t] => 4300 )