Título: Llamar un procedimiento almacenado PL desde PHP. Publicado por: Saberuneko en 19 Marzo 2014, 16:57 pm Lenguajes:
PHP, PL/SQL Problema: No consigo que se ejecute ningún procedimiento PL/SQL almacenado desde mi script PHP. Códigos: Tablas: Código
Procedimiento Almacenado a llamar: Código
Código PHP que trata de llamar al procedimiento almacenado: Código
Error: Código: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1370 execute command denied to user 'trader'@'localhost' for routine 'trademaster.BUY_STOCK' Observaciones: El usuario 'trader'@'localhost' que interactúa con la base de datos tiene los permisos de USAGE, SELECT, INSERT, UPDATE, DELETE y EXECUTE sobre todas las tablas de la base de datos (trademaster.*). Queries hacia la base de datos con SELECT, INSERT y UPDATE funcionan. El procedimiento almacenado funciona correctamente, ya lo he probado localmente desde una consola MySQL. La password del objeto PDO la quité por razones evidentes. Los valores POST y SESSION se recogen adecuadamente, lo he comprobado. Título: Re: Llamar un procedimiento almacenado PL desde PHP. Publicado por: #!drvy en 19 Marzo 2014, 23:37 pm Realmente no veo el problema xD
Segun lecturas en SOF podrías probar.. - Meterte como root y Código
o cambiar PROCEDURE por FUNCTION. Saludos Título: Re: Llamar un procedimiento almacenado PL desde PHP. Publicado por: Saberuneko en 20 Marzo 2014, 00:01 am Olvidé mencionar que probé a utilizar como usuario root en el PHP para ver si era cosa de permisos. Y me devolvía el mismo error...
De todas formas, voy a probar a ver si tira poniendo el permiso en específico para los procedimientos almacenados... Teniendo en cuenta que tengo 2 procedimientos que usan unas 2-3 funciones cada uno... ¿tendría que dar permisos de esta manera individual para cada función/procedimiento)? -- EDIT: He probado, sigue sin funcionar dando los permisos específicos. Título: Re: Llamar un procedimiento almacenado PL desde PHP. Publicado por: EFEX en 20 Marzo 2014, 00:31 am Utiliza comillas dobles y prueba..
Código
Título: Re: Llamar un procedimiento almacenado PL desde PHP. Publicado por: Saberuneko en 20 Marzo 2014, 00:55 am Nada, lo mismo con comillas simples que comillas dobles. No hace nada y sigue devolviendo el mismo error.
Nota: En las demás consultas que no son llamadas (SELECT, INSERT, UPDATE y DELETE) uso comilla simple y funciona y también estoy metiendo parámetros. Tiene pinta de que hay algún error de sintaxis en la cadena que se manda finalmente al servidor. Curiosamente, si hago var_dump de $x me devuelve un valor tal que: Código: 'CALL BUY_STOCK(:good, :trader, :ammount)' Si hago un var_dump de un código similar hecho con MySQLI, devuelve: Código: 'CALL BUY_STOCK(1,1,10)' (que son los valores de las variables a las que hago Bind).Si la operación la hago de la siguiente forma: Código
Lo que me devuelve var_dump es: Código: 'CALL BUY_STOCK(?,?,?)' Desgraciadamente, en todos estos casos, no funciona. ¿Qué puede estar mal o quedándose en el tintero? Título: Re: Llamar un procedimiento almacenado PL desde PHP. Publicado por: Saberuneko en 20 Marzo 2014, 17:51 pm Al final he portado todo lo que tenía en PL a PHP.
Desgraciadamente, me surgió un nuevo problema con la base de datos. Voy a abrir un topic al respecto. Título: Re: Llamar un procedimiento almacenado PL desde PHP. Publicado por: EFEX en 21 Marzo 2014, 02:33 am Quiero probar intentar encontrar el problema.. en version de mysql estas trabajando ?
Si te vuelve a generar problemas con GRANT y REVOKE, explica un poco que fue lo que hiciste u el error. Título: Re: Llamar un procedimiento almacenado PL desde PHP. Publicado por: Saberuneko en 21 Marzo 2014, 12:52 pm Tiene pinta de que se le había corrompido algo, ya que reinstalar y volcar tablas, users y privilegios tal y como estaban al empezar todo funciona bien.
De todas formas, de volver a fallar, comento. |