2009-01-13 16 views
5

I miei tentativi di interrogare MySQL da PHP con una dichiarazione di creazione di una procedura di archiviazione (SP) sono falliti. Non è possibile?Come creare una procedura memorizzata MySQL da PHP?

Se possibile, si prega di fornire un esempio.

+0

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

risposta

0

Hai avuto privilegi sufficienti sull'account che stai collegando da PHP? Da the manual

partire da MySQL 5.0.3, per eseguire il CREATE PROCEDURE o CREATE FUNZIONE dichiarazione, è necessario avere il privilegio CREATE ROUTINE

Vedi anche Stored Routines and MySQL Privileges nel manuale.

2

Finché:

  • Stai usando MySQL 5.0 +
  • Il tuo account è stato autorizzato per la creazione di stored procedure
  • Stai utilizzando la valida CREATE PROCEDURE syntax

Poi dovrebbe funzionare. Controlla questi e torna da noi.

1

Oltre ai privilegi, quello che molto probabilmente potrebbe causare il problema è, che in realtà mysql_query ($ query) può funzionare solo un comando per chiamata!

Quindi quello che devi fare è dividere i comandi in sevqal_query ($ query) -calls.

Voglio dire qualcosa di simile:

$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

Non è possibile utilizzare l'istruzione DELIMITER dall'interno PHP. Pertanto,

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

è fastidioso perché ora è necessario avere una versione con delimitatori per lo sviluppo e la sperimentazione in linea di comando MySQL o uno strumento di MySQL come sqlyog o MySQL Workbench, e una versione senza delimitatori da utilizzare tramite il vostro PHP programma.

Se qualcuno conosce un modo migliore, mi piacerebbe sentirlo - (ma non richiamando uno script di shell del sistema operativo -. Che ha troppi problemi di residui)

E avete bisogno di autorizzazioni SUPER.

Problemi correlati