php と mysql は自然な組み合わせです。ここでは、php で mysql ストアド プロシージャを呼び出し、返された結果を実行する方法を紹介します。詳しく知りたい学生向けに、MySQL ストアド プロシージャを呼び出す一般的な方法をいくつかまとめました。それらを参照してください。
MySQL は 5.0 からストアド プロシージャを導入しました。私は以前アプリケーションを作成していたときはストアド プロシージャに触れたことはありませんでしたが、現在は主に内部システムで使用されているため、フロント デスクでストアド プロシージャを使用する必要がある場合があります。 MySQLストアドプロシージャを呼び出したり、PHPではあまり対応していないようなのですが、情報が少ないので試してみました
。
1.ストアド プロシージャを呼び出すメソッド。
a.ストアド プロシージャに IN/INOUT パラメータがある場合は、変数を宣言し、その変数を PHP 変数のペアとしてストアド プロシージャに入力します (必須ではありませんが、PHP 変数がない場合は、それを行う方法がありません)。動的入力を実行します) と Mysql 変数。
b.ストアド プロシージャに OUT 変数がある場合は、Mysql 変数を宣言します。 mysql 変数の宣言は特別であり、mysql サーバーはこの変数の存在を認識している必要があります。これは、mysql ステートメントを実行することを意味します。 「set @mysqlvar=$phpvar;
」と入力してください
c. mysql_query()/mysql_db_query() を使用して、mysql 変数宣言ステートメントを実行します。
コードは次のとおりです |
コードをコピー |
mysql_query("set @mysqlvar【=$pbpvar】");
|
このように、mysql サーバーには変数 @mysqlar が存在します。 IN パラメータの場合、その値は phpar から渡すことができます。
d. ストアドプロシージャの場合。
1. callprocedure()ステートメントを実行します。
つまり、mysql_query("call プロシージャ([var1]...)");
2.戻り値がある場合はselect @arを実行し、実行結果を返します。
コードは次のとおりです |
コードをコピー |
mysql_query("select @var)" |
次の操作は、php が一般的な mysql ステートメントを実行するのと同じです。結果は、mydql_fetch_row() などの関数を通じて取得できます。
以下に、パラメーターなしでストアド プロシージャを呼び出す例をいくつかまとめました。
コードは次のとおりです
| コードをコピー
|
$conn = mysql_connect('localhost','root','root') or die ("データ接続エラー!!!");
mysql_select_db('test',$conn);
$sql = "
プロシージャ myproce() を作成します
始まります
INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
終わり;
";
mysql_query($sql);//myproce ストアド プロシージャを作成します
$sql = "test.myproce() を呼び出す;";
mysql_query($sql);//myproce のストアド プロシージャを呼び出すと、新しいレコードがデータベースに追加されます。
|
タイプ 1: 入力および出力の型パラメーターを使用したメソッドの呼び出し
コードは次のとおりです
| コードをコピー
|
$returnValue = '';
試してみてください{
mysql_query ( "set @Return" );
$spname = 'P__Test_GetInfo1';
mysql_query ( "call $spname(@Return, '{$userId}', '{$pwd}')" ) または die ( "[$spname]Query failed:" . mysql_error () );
$result_return = mysql_query ( "select @Return" );
$row_return = mysql_fetch_row ( $result_return );
$returnValue = $row_return [0];
} catch (例外 $e) {
エコー $e;
}
echo $returnValue; //ストアドプロシージャから出力された変数を出力します
|
タイプ 2: 複数の出力型と複数の入力型パラメーターを使用したメソッドの呼び出し
コードは次のとおりです |
コードをコピー |
$userId = 0;
試してください{
Mysql_query("set @Message");
Mysql_query("@Id を設定");
Mysql_query("call P__Test_Login(@Message, @Id, '{$userId}', '{$pwd}')", $conn) または die("Query failed:".mysql_error());
$result_mess = mysql_query("select @Message");
$result_uid = mysql_query("select @Id");
$row_mess = mysql_fetch_row($result_mess);
$row_uid = mysql_fetch_row($result_uid);
$Proc_Error = $row_mess[0];
$uId = $row_uid[0];
}
catch(例外 $e)
{
エコー $e;
}
echo 'proc return message:'$Proc_Error.' ' //ストアドプロシージャから出力された変数を出力します
echo 'ユーザーID:'.$uId //ユーザーIDを取得します ;
|
タイプ 3: 結果セットを返すメソッドの呼び出し
コードは次のとおりです |
コードをコピー |
試してください{
$spname = 'P__Test_GetData';
$query = mysql_query ( "call $spname()", $conn ) or die ( "[$spname]Query failed:".mysql_error() );
while ( $row = mysql_fetch_array ( $query ) ) {
echo $row ['ProvinceID'].'::'.$row ['ProvinceName'] // 出力データセット ;
}
} catch (例外 $e) {
エコー $e;
}
|
タイプ 4: 複数の結果セットを返すメソッドの呼び出し (現在は mysqli~~ を介してのみ可能)
コードは次のとおりです |
コードをコピー |
//PHP
$rows = 配列 ();
$db = 新しい mysqli($server,$user,$psd,$dbname);
if (mysqli_connect_errno()){
$this->message('MySQL サーバーに接続できません');
}
$db->query("SET NAMES UTF8");
$db->query("SET @Message");
if($db->real_query("call P__Test_GetData2(@Message)")){
する{
If($result = $db->store_result()){
while ($row = $result->fetch_assoc()){
array_push($rows, $row);
$result->close();
}while($db->next_result());
}
$db->close();
print_r($rows);
//手順
…
select * from T1 where ……
select * from T2 where ……
…
例 4: 送信パラメーターの inout ストアド プロシージャ
コードは次のとおりです |
コードをコピー |
$sql = "
プロシージャ myproce4(inout sexflag int) を作成します
始まります
SELECT * FROM user WHERE sex = sexflag;
終わり
";
mysql_query($sql);//myproce4 ストアド プロシージャを作成します
$sql = "@sexflag = 1 を設定";
mysql_query($sql);//性別パラメータを 1 に設定します
$sql = "test.myproce4(@sexflag) を呼び出します;";
mysql_query($sql);//myproce4 のストアド プロシージャを呼び出し、cmd での効果を確認します |
例 5: 変数を使用したストアド プロシージャ
コードは次のとおりです |
コードをコピー |
$sql = "
プロシージャ myproce5(in a int,in b int) を作成します
始まります
int のデフォルト 0 を宣言します;
セット s=a+b;
選択してください;
終わり
";
mysql_query($sql);//myproce5 ストアド プロシージャを作成します
$sql = "test.myproce5(4,6) を呼び出します;";
mysql_query($sql);// |
myproce5 のストアド プロシージャを呼び出し、cmd での効果を確認します
例 6: case 構文
コードは次のとおりです |
コードをコピー |
$sql = "
プロシージャ myproce6(スコア int) を作成します
始まります
事件スコア
60 の場合は、「パス」を選択します;
80 の場合は「和好」を選択してください;
100 の場合は、「優秀」を選択します;
それ以外の場合は「不明なスコア」を選択します;
エンドケース;
終わり
";
mysql_query($sql);//myproce6 ストアド プロシージャを作成します
$sql = "test.myproce6(100) を呼び出します;";
mysql_query($sql);// |
myproce6 のストアド プロシージャを呼び出し、cmd での効果を確認します
例 7: ループステートメント
コードは次のとおりです |
コードをコピー |
$sql = "
プロシージャ myproce7() を作成します
始まります
int のデフォルト 0 を宣言します;
j int のデフォルト 0 を宣言します;
その間私は10未満です
set j=j+i;
セット i=i+1;
そのうち終了します;
jを選択;
終わり
";
mysql_query($sql);//myproce7 ストアド プロシージャを作成します
$sql = "test.myproce7() を呼び出します;";
mysql_query($sql);// |
myproce7 のストアド プロシージャを呼び出し、cmd での効果を確認します
例 8: 繰り返しステートメント
コードは次のとおりです |
コードをコピー |
$sql = "
プロシージャ myproce8() を作成します
始まります
int のデフォルト 0 を宣言します;
j int のデフォルト 0 を宣言します;
リピート
set j=j+i;
セット i=i+1;
j>=10まで
繰り返しを終了します;
jを選択;
終わり
";
mysql_query($sql);//myproce8のストアドプロシージャを作成します
$sql = "test.myproce8() を呼び出す;";
mysql_query($sql);// |
myproce8 のストアド プロシージャを呼び出し、cmd での効果を確認します
例 9: ループステートメント
コードは次のとおりです |
コードをコピー |
$sql = "
プロシージャ myproce9() を作成します
始まります
int のデフォルト 0 を宣言します;
int のデフォルト 0 を宣言します;
ループ_ラベル:ループ
s=s+i を設定します;
セット i=i+1;
if i>=5 then
ループラベルを残します;
終了したら;
ループの終了;
選択してください;
終わり
";
mysql_query($sql);//myproce9 ストアド プロシージャを作成します
$sql = "test.myproce9() を呼び出す;";
mysql_query($sql);//
|
myproce9 のストアド プロシージャを呼び出し、cmd での効果を確認します
例 10: ストアド プロシージャを削除する
コードは次のとおりです |
コードをコピー |
mysql_query("dropprocedure if selected myproce");//test のストアド プロシージャを削除します
|
例 10: ストアド プロシージャ内のカーソル
|
http://www.bkjia.com/PHPjc/630700.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/630700.html技術記事 PHP と MySQL は自然に一致します。PHP で MySQL ストアド プロシージャを呼び出して、返された結果を実行する方法を紹介します。以下に、PHP で MySQL ストアド プロシージャを呼び出す一般的な方法をいくつかまとめました。