2009-01-13 23 views

Respuesta

0

¿Tiene suficientes privilegios en la cuenta con la que se conecta desde PHP? De the manual

partir de MySQL 5.0.3, para ejecutar el CREATE PROCEDURE o CREATE FUNCTION declaración, es necesario tener el permiso CREATE RUTINA

Véase también Stored Routines and MySQL Privileges en el manual.

2

Mientras:

  • Estás usando MySQL 5.0+
  • Su cuenta ha sido autorizado para su procedimiento de creación de
  • Estás usando la validez CREATE PROCEDURE syntax

Entonces almacenado debería estar funcionando. Verifique esto y vuelva a contactarnos.

1

Además de los privilegios, lo que con toda probabilidad puede provocar que el problema es que en realidad mysql_query ($ consulta) sólo puede funcionar un comando por llamada!

Entonces, lo que tienes que hacer es dividir los comandos en sevaral mysql_query ($ query) -calls.

Lo que quiero decir es algo como esto:

$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

No se puede utilizar la sentencia DELIMITER desde dentro de PHP. Por lo tanto,

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

es molesto porque ahora usted tiene que tener una versión con delimitadores para el desarrollo y las pruebas en línea de comandos MySQL o una herramienta MySQL como sqlyog o banco de trabajo de MySQL, y una versión sin los delimitadores en uso a través de su PHP programa.

Si alguien sabe una mejor manera, me gustaría oírlo - (pero no por llamar a un script de shell del sistema operativo -. Que tiene demasiados problemas residuales)

Y necesita permisos de super.

Cuestiones relacionadas