Ver Mensaje Individual
  #7 (permalink)  
Antiguo 30/11/2013, 12:53
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema con conexión a BD y clases

marlanga, seguí tu consejo, deshabilité las validaciones y desinfecciones y coloqué datos de forma directa, lo mismo con el código que se autogeneraba con un métdo de la clase Cls_Consultas(). Obtuve exactamente los mismos resultados que en las pruebas que había realizado antes de publicar este hilo: Basta con que utilice un método de la clase, para que, después de usarlo satisfactoriamente, la instancia se pierda. En este caso, sucedió con el método email(), pero lo mismo sucedía con el método que generaba el código.

Esta es la clase con los métodos:

Código PHP:
Ver original
  1. <?php
  2. class Cls_Consultas {
  3.     public $conexion;
  4.  
  5.     function __construct($conex) {
  6.         $this->conexion = $conex;
  7.     }
  8.  
  9.     function paises() {
  10.         return $this->conexion->query("CALL USP_listCountries()");
  11.     }
  12.  
  13.     function ciudades($pais) {
  14.         return $this->conexion->query(sprintf("CALL USP_listCities(%d)", $pais));
  15.     }
  16.  
  17.     function codigo($codigo) {
  18.         return $this->conexion->query(sprintf("CALL USP_validateCode('%s')", $codigo));
  19.     }
  20.  
  21.     function email($email) {        
  22.         return $this->conexion->query(sprintf("CALL USP_validateEmail('%s')", $email));
  23.     }
  24.  
  25.     function guardarForm($datos) {
  26.         return $this->conexion->query(sprintf("CALL USP_saveForm('%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
  27.                 $datos["codigo"],
  28.                 $datos["nombre"],
  29.                 $datos["apellidos"],
  30.                 $datos["email"],
  31.                 $datos["domicilio"],
  32.                 $datos["fechanac"],
  33.                 $datos["pais"],
  34.                 $datos["ciudad"]
  35.             ));
  36.     }
  37. }
  38. ?>

Y esos son los procedimientos almacenados críticos:

Código MySQL:
Ver original
  1. /* PA que verifica que el código no se encuentre registrado */
  2.  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_validateCode`(IN `code` VARCHAR(10))
  4.     CONTAINS SQL
  5.     COMMENT ''
  6. SELECT codigo FROM datos WHERE codigo = code
  7.  
  8.  
  9. /* PA que verifica que el email ingresado, no se encuentre registrado */
  10.  
  11. CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_validateEmail`(IN `mail` VARCHAR(80))
  12.     CONTAINS SQL
  13.     COMMENT ''
  14. SELECT email FROM datos WHERE email = mail
  15.  
  16. /* PA que guarda los datos del formulario en la BD luego de todas las validaciones */
  17.  
  18. CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_saveForm`(IN `codigo` VARCHAR(10), IN `nombre` VARCHAR(150), IN `apellidos` VARCHAR(150), IN `email` VARCHAR(80), IN `domicilio` VARCHAR(255), IN `fechanac` DATE, IN `pais` INT(11), IN `ciudad` INT(11))
  19.     CONTAINS SQL
  20.     COMMENT ''
  21. INSERT INTO datos VALUES (codigo, nombre, apellidos, email, domicilio, fechanac, pais, ciudad)

Hay otros dos PA que utilizo en otros archivos, con ellos no tuve problemas pues solamente invoco a uno de los métodos de la clase, por cada archivo, sin embargo, si, por ejemplo, intento listar los datos de una tabla invocando otro método, que a su vez, invoca a un PA, éste no se ejecuta, produciéndose el mismo problema que con los otros 3 métodos en cuestión.

En síntesis, cuando invoco a un método de la clase, funciona sin problemas, pero si, en el mismo archivo, invoco a otro método o al mismo nuevamente, no funcionan por el problema que les expliqué. Como verán en el código, instancio a otras tres clases, de las cuales, utilizo más de una vez a los métodos de dos de ellas y no se produce el problema que ocurre con la clase que interactúa con la BD.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand