elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [32] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ... 211
311  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Nuevo sistema de puntuación? en: 21 Marzo 2014, 21:00 pm
Mejor si es privado, he visto sistemas de puntitos y estrellitas acabar con foros.
No sé por qué, pero mucha gente se crece sólo por tener un gordo número de posts, cuando lo importante es calidad, no cantidad...

El caso, cuidado.
312  Programación / Desarrollo Web / Re: Llamar un procedimiento almacenado PL desde PHP. 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.
313  Programación / Bases de Datos / Re: MySQL - Grant y Revoke dejaron de funcionar. en: 20 Marzo 2014, 19:06 pm
Tenía un backup de todas las tablas, y los datos no eran realmente importantes.

Al final reinstalé MySQL.
314  Programación / Bases de Datos / MySQL - Grant y Revoke dejaron de funcionar. en: 20 Marzo 2014, 17:52 pm
No puedo dar ni quitar permisos a ningún user en mi base de datos.

He comprobado los permisos de root, y están intactos.

¿Por dónde puedo empezar a mirar?
315  Programación / Desarrollo Web / Re: Llamar un procedimiento almacenado PL desde PHP. 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.
316  Foros Generales / Sugerencias y dudas sobre el Foro / Re: sugiero captcha para crear usuario y tema en: 20 Marzo 2014, 14:19 pm
Yo no sé leer captchas Q.Q
317  Programación / Desarrollo Web / Re: Llamar un procedimiento almacenado PL desde PHP. 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
  1. $x = $db->prepare('CALL BUY_STOCK(?,?,?)');
  2. $x->bindParam(1, $good, PDO::PARAM_INT);
  3. $x->bindParam(2, $id, PDO::PARAM_INT);
  4. $x->bindParam(3, $ammount, PDO::PARAM_INT);
  5.  

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?
318  Programación / Desarrollo Web / Re: Llamar un procedimiento almacenado PL desde PHP. 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.
319  Foros Generales / Foro Libre / Re: 4chan Risk - Partida en: 19 Marzo 2014, 16:58 pm
Uso todas las fuerzas para contrarrestar el ataque, y si sobran, avanzo hacia el norte de los territorios de 0xDani.
320  Programación / Desarrollo Web / Llamar un procedimiento almacenado PL desde PHP. 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
  1. /*GOODS TABLE, WILL CONTAIN ALL GOODS*/
  2. CREATE TABLE GOODS(
  3. ID INT(3) AUTO_INCREMENT,
  4. NAME CHAR(20) UNIQUE,
  5. IMGFILE CHAR(20),
  6. L_PRICE INT(4),
  7. S_PRICE INT(4),
  8. H_PRICE INT(4),
  9. C_PRICE INT(4),
  10. PRIMARY KEY(ID));
  11.  
  12. /*TRADERS TABLE, WILL CONTAIN ALL USERS AND THEIR DATA*/
  13. CREATE TABLE TRADERS(
  14. ID INT(3) AUTO_INCREMENT,
  15. USERNAME CHAR(20) NOT NULL,
  16. PASSWORD CHAR(20) NOT NULL,
  17. MAIL CHAR(40) NOT NULL,
  18. CREDITS CHAR(20) NOT NULL,
  19. PRIMARY KEY(ID));
  20.  
  21. /*STOCKS TABLE, WILL CONTAIN EACH USER'S (TRADER) STOCK*/
  22. CREATE TABLE STOCKS(
  23. GOOD_ID INT(3),
  24. TRADER_ID INT(3),
  25. AMMOUNT INT(10),
  26. AVG_BUY INT(4),
  27. FOREIGN KEY(GOOD_ID)
  28. REFERENCES GOODS(ID)
  29. ON DELETE CASCADE,
  30. FOREIGN KEY(TRADER_ID)
  31. REFERENCES TRADERS(ID)
  32. ON DELETE CASCADE);

Procedimiento Almacenado a llamar:
Código
  1. /*THIS PROCEDURE ALLOWS THE TRADERS TO BUY STOCKS*/
  2. CREATE PROCEDURE BUY_STOCK(P_GOOD INT,P_TRADER INT,P_AMMOUNT INT)
  3. BEGIN
  4. DECLARE V_PRICE, V_COST INT;
  5. SELECT C_PRICE INTO V_PRICE
  6. FROM GOODS
  7. WHERE ID = P_GOOD;
  8.  
  9. SET V_COST = V_PRICE*P_AMMOUNT;
  10.  
  11. IF HAS_CREDITS(P_TRADER,V_COST) THEN
  12. IF HAS_STOCK(P_GOOD,P_TRADER) THEN
  13. UPDATE STOCKS
  14. SET AMMOUNT = AMMOUNT + P_AMMOUNT
  15. WHERE GOOD_ID = P_GOOD
  16. AND TRADER_ID = P_TRADER;
  17. UPDATE STOCKS
  18. SET AVG_BUY = ((AVG_BUY*(AMMOUNT-P_AMMOUNT))+(V_PRICE*P_AMMOUNT))/AMMOUNT
  19. WHERE GOOD_ID = P_GOOD
  20. AND TRADER_ID = P_TRADER;
  21. ELSE
  22. INSERT INTO STOCKS
  23. VALUES(P_GOOD,P_TRADER,P_AMMOUNT,V_PRICE);
  24. END IF;
  25. UPDATE TRADERS
  26. SET CREDITS = CREDITS - V_COST
  27. WHERE ID = P_TRADER;
  28. END IF;
  29. END;

Código PHP que trata de llamar al procedimiento almacenado:
Código
  1. <?php
  2. session_name('trademaster');
  3.  
  4. if($_POST['transaction'] = "Buy")
  5. {
  6.  
  7. $good = $_POST['goodid'];
  8. $id = $_SESSION['id'];
  9. $ammount = $_SESSION['ammount'];
  10. $db = new PDO("mysql:host=localhost;dbname=trademaster", 'trader', '********');
  11.  
  12. $x = $db->prepare('CALL BUY_STOCK(:good, :trader, :ammount)');
  13.  
  14. $x->bindValue(':good', $good, PDO::PARAM_INT);
  15. $x->bindValue(':trader', $id, PDO::PARAM_INT);
  16. $x->bindValue(':ammount', $ammount, PDO::PARAM_INT);
  17.  
  18. $x->execute();
  19.  
  20. unset($db);
  21.  
  22. header("location:stocks.php");
  23. exit();
  24. }
  25. ?>

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.
Páginas: 1 ... 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [32] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ... 211
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines