2009-01-13 9 views
5

Mes tentatives d'interroger MySQL à partir de PHP avec une instruction create d'une procédure de stockage (SP) ont toutes échoué. Est-ce que ce n'est pas possible?Comment créer une procédure stockée MySQL à partir de PHP?

Si cela est possible, veuillez donner un exemple.

+0

http://forums.mysql.com/read.php?98,161275,161275 –

Répondre

0

Avez-vous des privilèges suffisants sur le compte que vous vous connectez de PHP avec? De the manual

Au MySQL 5.0.3 déclaration, pour exécuter le ou CREATE PROCEDURE FONCTION CREER, il est nécessaire d'avoir le privilège CREER ROUTINE

Voir aussi Stored Routines and MySQL Privileges dans le manuel.

2

Tant que:

  • Vous utilisez MySQL 5.0+
  • Votre compte a été autorisé pour la création d'une procédure stockée
  • Vous utilisez le valide CREATE PROCEDURE syntax

Ensuite, ça devrait marcher. Vérifiez-les et revenez nous voir.

1

En plus des privilèges, ce qui pourrait très probablement la cause de votre problème est que en fait mysql_query ($ query) ne peut fonctionner une commande par appel! Donc, ce que vous avez à faire est de diviser les commandes en sevaral mysql_query ($ query) -calls.

Ce que je veux dire est quelque chose comme ceci:

$query = "DROP FUNCTION IF EXISTS fnElfProef (accountNr INT)"; 

mysql_query($query); 

$query = "CREATE FUNCTION fnElfProef (accountNr INT) 
    RETURNS BOOLEAN 
     BEGIN 
      DECLARE i, totaal INT DEFAULT 0; 
      WHILE i < 9 DO 
      SET i = i+1; 
      SET totaal = totaal+(i*(accountNr%10)); 
      SET accountNr = FLOOR(accountNr/10); 
      END WHILE; 
     RETURN (totaal%11) = 0; 
    END"; 
mysql_query($query); 


$query = "SELECT * FROM mytable"; 
mysql_query($query); 
0

Vous ne pouvez pas utiliser l'instruction DELIMITER à partir de PHP. Par conséquent,

1) remove the DELIMITER statements 
2)and change all your delimiters to ; 

Il est ennuyeux parce que maintenant vous devez avoir une version avec DELIMITERS pour le développement et les tests en ligne de commande MySQL ou un outil MySQL comme sqlyog ou établi MySQL, et une version sans DELIMITERS à utiliser via votre PHP programme.

Si quelqu'un connaît une meilleure façon, je voudrais l'entendre - (mais pas en appelant un script shell OS -. Qui a trop de problèmes résiduels)

Et vous avez besoin d'autorisations SUPER.

Questions connexes