web-dev-qa-db-ja.com

phpmyadminを使用してストアドプロシージャを作成する方法と、phpを使用してストアドプロシージャを使用する方法

phpMyAdminを使用してストアドプロシージャを作成し、後でphpで使用できるようにします。

しかし、私は方法がわからないのですか?

私が知っていることから、ストアドプロシージャをphpMyAdminで管理できないことがわかりました。

ストアドプロシージャを管理できる他のツールは何ですか?

PHPを介してストアドプロシージャを使用する方が良いオプションかどうかもわかりません。 何か提案はありますか?

60
Starx

ストアドプロシージャはクエリを使用して作成、変更、および削除されるため、実際にphpMyAdminを使用してそれらを管理できます。

ストアドプロシージャを作成するには、次を使用できます(必要に応じて変更します)。

CREATE PROCEDURE sp_test()
BEGIN
  SELECT 'Number of records: ', count(*) from test;
END//

そして、必ず[SQL]タブの[区切り文字]フィールドを//に設定してください。

ストアドプロシージャを作成すると、テーブル([構造]タブ)の下の[ルーチン]フィールドセットに表示され、簡単に変更/ドロップできます。

PHPのストアドプロシージャを使用するには、プレーンSQLで行うのと同じように、CALLクエリを実行する必要があります。

94
wimvds

誰もこれに言及していないので、ここに書きます。 phpMyAdmin 4.xでは、最上行の[ルーチン]タブの下に[ルーチンの追加]リンクがあります。このリンクは、区切り記号やテンプレートを気にせずにストアドプロシージャを作成できるポップアップダイアログを開きます。

enter image description here

ルーチンを追加

enter image description here

単純なテストストアドプロシージャの場合は、既に指定されている既定のパラメーターを削除するか、単に値を設定することができます。

59
Hammad Khan

これを試して

delimiter ;;

drop procedure if exists test2;;

create procedure test2()

begin

select ‘Hello World’;

end

;;
25
Sourav

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のブログ は、コマンドラインにアクセスできると仮定した場合の優れたソリューションです。修正しない場合の修正方法がわかりません。

1
Paul J

Toad for MySQLをお試しください-無料で優れています。

1
ronaldosantana
  1. 区切り文字;;
  2. CREATE PROCEDURE sp_number_example_records()
  3. ベギン
    SELECT count(id)from customer;終わり
  4. ;;
1
Jay Thakkar

PhpAdminで動作するようになりましたが、「レコード数」というフレーズを削除した場合のみです。

PhpAdminの私のバージョンでは、区切り文字を変更するためのボックスが表示されました。

また、データベース内の手順を確認するために、phpAdminホーム、information_schemaデータベース、ルーチンテーブルの順に移動しました。

1
Reto

上記の答えはすべて、特定の仮定を行っています。 1and1には基本的な問題があり、他の特定のホスティングプロバイダーはphpMyAdminのバージョンを使用していますが、これは非常に古く、区切り文字が定義されているという問題があります。 phpMyAdminから変更する方法はありません。以下はその方法です

  1. ホスティングプロバイダーで新しいPHPMyAdminを作成します。添付リンクからアイデアが得られます http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
  2. ホスティングプロバイダーmySQLにdekstopからアクセスできるという複雑なルートをたどってください。複雑ですが、真面目な開発者なら最高です。ここにそれを行うためのリンクがあります http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/

お役に立てれば

0
Sandeep Taneja

ローカルサーバーでは、次のクエリが機能します

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;

それがあなたを助けることを願っています。

ありがとう

0
Delickate
/*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$$
0
Ajnabi