phpとmysqlは自然な組み合わせです。 それでは、phpプログラム内でmysqlで記述されたストアドプロシージャを呼び出す方法を紹介します。具体的な実装方法を見てみましょう。
Mysqlストアドプロシージャ作成構文
コードは次のとおりです |
コードをコピー |
プロシージャの作成と関数の作成
プロシージャの作成 sp_name ([proc_parameter[,...]])
[特徴 ...] ルーチンボディ
関数 sp_name ([func_parameter[,...]]) を作成します
返品タイプ
[特徴 ...] ルーチンボディ
proc_parameter:
[ IN | INOUT ] パラメータ名タイプ
func_parameter:
param_name タイプ
タイプ:
任意の有効な MySQL データ型
特徴:
言語SQL
| [非] 決定論的
| { SQL を含みません | SQL データを変更します |
| SQL セキュリティ { 定義者 }
| コメント「文字列」
ルーチン本体:
有効な SQL プロシージャ ステートメント
|
読み終わったら、簡単なストアド プロシージャの作成を開始できます。
まずストアドプロシージャを作成、プロシージャ(サブルーチン)を作成、関数(ファンクション)を作成
コードは次のとおりです
| コードをコピー
|
プロシージャ sp_Name ([proc_parameter]) を作成します
ルーチンボディ
|
ここでのパラメータのタイプは IN OUT INOUTT にすることができます。これは単語の意味と同じです。IN は渡されるパラメータを意味し、OUT は渡されるパラメータを意味し、INOUT は渡されるが最終的に返されるパラメータを意味します。
コードは次のとおりです
| コードをコピー
|
functionsp_Name ([func_parameter ]) を作成します
戻り値の型
ルーティンボディ
|
戻り値の型は、戻り値の型と同じである必要があります。そうでない場合は、エラーが報告されます。
簡単な例を次に示します:
コードは次のとおりです
| コードをコピー
|
mysql> 区切り文字 //
mysql> プロシージャ g を作成します
-> 始めます
-> バージョンを選択() i
->終了
-> //
クエリは OK、影響を受ける行は 0 つあります
mysql> getversion(@a) を呼び出します。
-> //
クエリは OK、影響を受ける行は 0 つあります
mysql>@a;を選択します
-> //
+---------------------+
| @a
+---------------------+
| 5.0.45-コミュニティ-nt |
+---------------------+
セット内の 1 行 (0.05 秒)
|
現在の mysql バージョンを取得するためのストアド プロシージャ。それでは、php と mysql ストアド プロシージャを組み合わせる方法です。
//以下は百度からのものです:
コードは次のとおりです |
コードをコピー |
ユーザーが存在する場合はテーブルを削除します
テーブルユーザーの作成(
ID int unsigned not null auto_increment、
名前 varchar(20) が null ではありません、
Pwd char(32) が null ではありません、
主キー(ID)
);
|
ユーザーのストアド プロシージャを追加します:
コードは次のとおりです
| コードをコピー
|
区切り文字 //
プロシージャを作成します insertuser(in username varchar(20),in userpwd varchar(32))
始めましょう
welefen.user(Name,Pwd) の値 (username,md5(userpwd)) に挿入します
終了
//
|
ユーザーを認証するストアド プロシージャ:
コードは次のとおりです
| コードをコピー
|
区切り文字 //
プロシージャ validateuser(in username varchar(20),out param1) を作成します
始めましょう
Welefen.user から param1 に Pwd を選択します (Name=username)。
終了
//
|
パスワード変更のストアドプロシージャ:
コードは次のとおりです
コードをコピー |
|
区切り文字 //
プロシージャmodifyPwd(in username varchar(20),in userpwd varchar(32))を作成します
始めましょう
welefen.user set Pwd=md5(userpwd) を更新します (Name=username)。
終了
//
| ユーザーのストアド プロシージャを削除します:
コードは次のとおりです
コードをコピー
|
| 区切り文字 //
プロシージャ deleteuser(ユーザー名 varchar(20) 内) を作成します
始めましょう
Welefen.user から削除(Name=ユーザー名)
終了
//
クライアント側では、次のプログラムを提供します:
コードは次のとおりです |
コードをコピー |
If (!mysql_connect("localhost","root","welefen")){
echo 「データベースに接続できませんでした」
}
If (!mysql_select_db("welefen")){
echo "データベース テーブルの選択に失敗しました ";
}
$insert_user=array("welefen","welefen");//Welefen はそれぞれユーザー名とパスワードです
If (mysql_query("call insertuser('$insert_user[0]','$insert_user[1]')")){
echo "ユーザー $insert_user[0] が正常に追加されました ";
}その他{
echo "ユーザー $insert_user[0] を追加できませんでした ;
}
$validate_user=array("welefen","welefen");//ここでの Welefen はそれぞれユーザー名とパスワードです
Mysql_query("call validateuser('$validate_user[0]',@a)");
$Pwd=mysql_query("select @a");
$result=mysql_fetch_array($Pwd);
If ($result[0]==md5($validate_user[1])){
echo "ユーザー $validate_user[0] は正しく検証されました ";
}その他{
echo "ユーザー $validate_user[0] の検証エラー ";
}
$modify_Pwd=array("welefen","weilefeng"); //welefen はユーザー名、weilefeng は新しいパスワードです
If (mysql_query("callmodifyPwd('$modify_Pwd[0]','$modify_Pwd[1]')")){
echo "ユーザー $modigy_Pwd[0] のパスワードは正常に変更されました ";
}その他{
ユーザー $modigy のパスワード変更_Pwd[0] が失敗しました ";
}
$delete_user=array("welefen"); //welefen はユーザー名です
If (mysql_query("call deleteuser('$delete_user[0]')")){
echo "ユーザー $delete_user[0] は正常に削除されました ";
}その他{
echo "ユーザー $delete_user[0] を削除できませんでした ;
}
?>
これで終わりです。実際、これらの単純なアプリケーションは、mysql のストアド プロシージャを作成することで大幅に削減できることがわかります。顧客サービス側のプレッシャーですが、データベース サービスのプレッシャーも高まります。さまざまなメリットとデメリットを現実的に比較検討する必要があります。
|
http://www.bkjia.com/PHPjc/632923.html
www.bkjia.com
| true
http://www.bkjia.com/PHPjc/632923.html技術記事
PHPとMySQLは相性が良いので、MySQLで記述したストアドプロシージャをPHPプログラム内で呼び出す方法を紹介します。 MySQL ストレージ...