Je veux être capable de créer des procédures stockées en utilisant phpMyAdmin
et plus tard, de l'utiliser via php
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?
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.
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.
Ajouter une routine
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.
essaye ça
delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;
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.
Essayez Toad for MySQL - c'est gratuit et c'est génial.
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.
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
J'espère que cela t'aides
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
/*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$$