phpMyAdmin
を使用してストアドプロシージャを作成し、後でphpで使用できるようにします。
私が知っていることから、ストアドプロシージャをphpMyAdmin
で管理できないことがわかりました。
ストアドプロシージャを管理できる他のツールは何ですか?
PHPを介してストアドプロシージャを使用する方が良いオプションかどうかもわかりません。 何か提案はありますか?
ストアドプロシージャはクエリを使用して作成、変更、および削除されるため、実際にphpMyAdminを使用してそれらを管理できます。
ストアドプロシージャを作成するには、次を使用できます(必要に応じて変更します)。
CREATE PROCEDURE sp_test()
BEGIN
SELECT 'Number of records: ', count(*) from test;
END//
そして、必ず[SQL]タブの[区切り文字]フィールドを//に設定してください。
ストアドプロシージャを作成すると、テーブル([構造]タブ)の下の[ルーチン]フィールドセットに表示され、簡単に変更/ドロップできます。
PHPのストアドプロシージャを使用するには、プレーンSQLで行うのと同じように、CALLクエリを実行する必要があります。
誰もこれに言及していないので、ここに書きます。 phpMyAdmin 4.xでは、最上行の[ルーチン]タブの下に[ルーチンの追加]リンクがあります。このリンクは、区切り記号やテンプレートを気にせずにストアドプロシージャを作成できるポップアップダイアログを開きます。
ルーチンを追加
単純なテストストアドプロシージャの場合は、既に指定されている既定のパラメーターを削除するか、単に値を設定することができます。
これを試して
delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;
PhpMyAdmin(3.5.1)の新しいバージョンでは、ストアドプロシージャのサポートが大幅に向上しています。含む:編集、実行、エクスポート、PHPコード作成、およびデバッグ。
Config.inc.phpでmysqli拡張機能を使用していることを確認してください
$cfg['Servers'][$i]['extension'] = 'mysqli';
データベースを開くと、上部にRoutinesという新しいタブが表示されます。次に、Add Routine。
最初に行ったテストでは、次のエラーメッセージが生成されました。
MySQLによると:#1558-mysql.procの列数が間違っています。予想される20、見つかった16。MySQL50141で作成され、現在50163が実行されています。mysql_upgradeを使用してこのエラーを修正してください。
Ciulyのブログ は、コマンドラインにアクセスできると仮定した場合の優れたソリューションです。修正しない場合の修正方法がわかりません。
Toad for MySQLをお試しください-無料で優れています。
PhpAdminで動作するようになりましたが、「レコード数」というフレーズを削除した場合のみです。
PhpAdminの私のバージョンでは、区切り文字を変更するためのボックスが表示されました。
また、データベース内の手順を確認するために、phpAdminホーム、information_schemaデータベース、ルーチンテーブルの順に移動しました。
上記の答えはすべて、特定の仮定を行っています。 1and1には基本的な問題があり、他の特定のホスティングプロバイダーはphpMyAdminのバージョンを使用していますが、これは非常に古く、区切り文字が定義されているという問題があります。 phpMyAdminから変更する方法はありません。以下はその方法です
お役に立てれば
ローカルサーバーでは、次のクエリが機能します
DELIMITER |
CREATE PROCEDURE sample_sp_with_params (IN empId INT UNSIGNED, OUT oldName VARCHAR(20), INOUT newName VARCHAR(20))
BEGIN
SELECT `first name` into oldName FROM emp where id = empId;
UPDATE emp SET `first name`= newName where id = empId;
END
|
DELIMITER ;
しかし、実稼働サーバーでは機能しない場合があります。使用しているmysqlのバージョンに依存します。 powwebサーバーで同じ問題が発生しました。区切り文字を削除してキーワードを開始すると、正常に動作します。次のクエリを見てください
CREATE PROCEDURE adminsections( IN adminId INT UNSIGNED ) SELECT tbl_adminusersection.ads_name, tbl_adminusersection.ads_controller FROM tbl_adminusersectionright LEFT JOIN tbl_adminusersection ON ( tbl_adminusersectionright.adsr_ads_id = tbl_adminusersection.ads_id ) LEFT JOIN tbl_adminusers ON ( tbl_adminusersectionright.adsr_adusr_id = tbl_adminusers.admusr_id ) WHERE tbl_adminusers.admusr_id = adminId;
それがあなたを助けることを願っています。
ありがとう
/*what is wrong with the following?*/
DELIMITER $$
CREATE PROCEDURE GetStatusDescr(
in pStatus char(1),
out pStatusDescr char(10))
BEGIN
IF (pStatus == 'Y THEN
SET pStatusDescr = 'Active';
ELSEIF (pStatus == 'N') THEN
SET pStatusDescr = 'In-Active';
ELSE
SET pStatusDescr = 'Unknown';
END IF;
END$$