web-dev-qa-db-fra.com

Comment écrire une procédure stockée en utilisant phpmyadmin et comment l'utiliser avec php?

Je veux être capable de créer des procédures stockées en utilisant phpMyAdmin et plus tard, de l'utiliser via php 

Mais je ne sais pas comment faire?

D'après ce que je sais, j'ai découvert que nous ne pouvons pas gérer les procédures stockées via phpMyAdmin.

Quel autre outil peut gérer la procédure stockée?

Je ne suis même pas sûr qu'il soit préférable d'utiliser une procédure stockée via PHP. Toute suggestion?

58
Starx

Puisqu’une procédure stockée est créée, modifiée et supprimée à l’aide de requêtes, vous pouvez réellement les gérer à l’aide de phpMyAdmin.

Pour créer une procédure stockée, vous pouvez utiliser les éléments suivants (à modifier si nécessaire):

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

Et assurez-vous de définir le champ "Delimiter" de l'onglet SQL sur //.

Une fois que vous avez créé la procédure stockée, elle apparaît dans le groupe de champs Routines sous vos tables (dans l'onglet Structure) et vous pouvez facilement la modifier/la supprimer.

Pour utiliser la procédure stockée à partir de PHP, vous devez exécuter une requête CALL, comme vous le feriez en langage SQL simple.

92
wimvds

Je suppose que personne n'en a parlé alors je vais l'écrire ici. Dans phpMyAdmin 4.x, il y a un lien "Ajouter une routine" sous l'onglet "Routines" dans la rangée du haut. Ce lien ouvre une boîte de dialogue contextuelle dans laquelle vous pouvez écrire votre procédure stockée sans vous soucier du délimiteur ou du modèle.

enter image description here

Ajouter une routine

enter image description here

Notez que pour une procédure stockée test simple, vous pouvez supprimer le paramètre par défaut déjà défini ou simplement le définir avec une valeur.

57
Hammad Khan

essaye ça

delimiter ;;

drop procedure if exists test2;;

create procedure test2()

begin

select ‘Hello World’;

end

;;
25
Sourav

La nouvelle version de phpMyAdmin (3.5.1) offre un meilleur support pour les procédures stockées. y compris: édition, exécution, exportation, création de code PHP et un certain débogage.

Assurez-vous que vous utilisez l'extension mysqli dans config.inc.php

$cfg['Servers'][$i]['extension'] = 'mysqli';

Ouvrez n’importe quelle base de données. Un nouvel onglet intitulé Routines apparaît en haut de la page, puis sélectionnez Add Routine.

Le premier test que j'ai effectué a généré le message d'erreur suivant:

MySQL a dit: # 1558 - Le nombre de colonnes de mysql.proc est incorrect. Attendu 20, trouvé 16. Créé avec MySQL 50141, exécutant maintenant 50163. Veuillez utiliser mysql_upgrade pour corriger cette erreur.

Le blog de Ciuly fournit une bonne solution, en supposant que vous ayez un accès en ligne de commande. Je ne sais pas comment vous pourriez le réparer si vous ne le faites pas.

1
Paul J

Essayez Toad for MySQL - c'est gratuit et c'est génial.

1
ronaldosantana
  1. délimiteur ;;
  2. CREATE PROCEDURE sp_number_example_records ()
  3. COMMENCER
    SELECT compte (id) du client; FIN
  4. ;;
1
Jay Thakkar

Je l'ai fait fonctionner dans phpAdmin, mais seulement lorsque j'ai supprimé la phrase "Nombre d'enregistrements".

Dans ma version de phpAdmin, je pouvais voir la boîte pour changer les délimiteurs.

Aussi, pour voir la procédure dans la base de données, je suis allé dans la page d'accueil phpAdmin, puis dans la base de données information_schema, puis dans la table des routines.

1
Reto

Toutes les réponses ci-dessus font certaines hypothèses. Il y a des problèmes fondamentaux dans 1and1 et certains autres fournisseurs d’hébergement utilisent des versions de phpMyAdmin qui sont très anciennes et qui ont un problème comme délimiteur défini; et il n'y a aucun moyen de le changer depuis phpMyAdmin. Voici les moyens

  1. Créez un nouveau PHPMyAdmin sur le fournisseur d'hébergement. Le lien ci-joint vous donne une idée http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1/
  2. Suivez l’itinéraire compliqué pour pouvoir accéder à votre fournisseur d’hébergement mySQL à partir de votre compte. C'est compliqué mais le meilleur si vous êtes un développeur sérieux. voici un lien pour le faire http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/

J'espère que cela t'aides

0
Sandeep Taneja

Sur le serveur local, votre requête suivante fonctionnera

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 ;

mais sur le serveur de production, cela pourrait ne pas fonctionner. dépend de la version de MySQL que vous utilisez. J'ai eu un même problème sur le serveur Powweb, j'ai supprimé le délimiteur et commencer les mots clés, cela fonctionne très bien ..

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;

j'espère que ça vous aidera.

merci

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