Comment écrire une procédure stockée en utilisant phpmyadmin et comment l'utiliser via php?
Je veux pouvoir créer des procédures stockées en utilisant phpMyAdmin
et plus tard l'utiliser via php.
Mais je ne sais pas comment?
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 procédure stockée?
Je ne suis même pas sûr s'il est préférable d'utiliser la procédure stockée via PHP. une suggestion?
10 réponses
Comme une procédure stockée est créée, modifiée et supprimée à l'aide de requêtes, vous pouvez les gérer en utilisant phpMyAdmin.
Pour créer une procédure stockée, vous pouvez utiliser ce qui suit (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 "délimiteur" sur L'onglet SQL sur //.
Une fois que vous avez créé la procédure stockée, elle apparaîtra dans le jeu de champs Routines sous vos tables (dans L'onglet Structure), et vous pouvez facilement la modifier/la supprimer.
Pour utiliser le stocké procédure de PHP, vous devez exécuter une requête D'appel, tout comme vous le feriez dans SQL simple.
Je suppose que personne ne l'a mentionné 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 de test simple, vous pouvez supprimer le paramètre par défaut qui est déjà donné ou vous pouvez simplement le définir avec une valeur.
Essayez ceci
delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;
Je l'ai fait fonctionner dans phpAdmin, mais seulement quand 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é à la maison phpAdmin, puis la base de données information_schema, puis la table des routines.
La nouvelle version de phpMyAdmin (3.5.1) a 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 une base de données, vous verrez un nouvel onglet en haut appelé Routines , puis sélectionnez Ajouter une Routine.
Le premier test que j'ai fait a produit le message d'erreur suivant:
MySQL a dit: # 1558-colonne le comte de mysql.proc a tort. Attendu 20, trouvé 16. Créé avec MySQL 50141, maintenant en cours d'exécution 50163. Veuillez utiliser mysql_upgrade pour corriger cette erreur.
Le Blog de Ciuly fournit une bonne solution, en supposant que vous avez un accès en ligne de commande. Je ne sais pas comment vous le répareriez si vous ne le faites pas.
- délimiteur ;;
- Créer la procédure sp_number_example_records ()
- Début
Sélectionnez le nombre (id) du client; Fin - ;;
Toutes les réponses ci-dessus font certaines hypothèses. Il y a des problèmes de base dans 1and1 et certains autres fournisseurs d'hébergement utilisent des versions de phpMyAdmin qui sont très anciennes et ont un problème défini par delimiter ; et il n'y a aucun moyen de le changer de phpMyAdmin. Voici les façons
- 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/
- Allez à travers le itinéraire compliqué de pouvoir accéder à vos fournisseurs d'hébergement mySQL à partir de votre dekstop. C'est compliqué, mais le meilleur si vous êtes un sérieux développeur. voici un lien pour le faire http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/
J'espère que cela aide
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 peut ne pas fonctionner. dépend de la version mysql que vous utilisez. J'ai eu le même problème sur le serveur powweb, j'ai supprimé delimiter et begin keywords, cela fonctionne bien. jetez un oeil à la requête suivante
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$$