Foros del Web » Programando para Internet » PHP »

PHP y procedimientos almacenados

Estas en el tema de PHP y procedimientos almacenados en el foro de PHP en Foros del Web. Hola a todos estoy desarrollando una aplicación en PHP que contiene procedimientos almacenados pero no les he trabajado muy bien en MySQL entonces mi pregunta ...
  #1 (permalink)  
Antiguo 05/05/2013, 18:06
 
Fecha de Ingreso: octubre-2009
Mensajes: 29
Antigüedad: 14 años, 6 meses
Puntos: 0
Pregunta PHP y procedimientos almacenados

Hola a todos estoy desarrollando una aplicación en PHP que contiene procedimientos almacenados pero no les he trabajado muy bien en MySQL
entonces mi pregunta es si me pueden ayudar haber cual es el error que tengo.

Estoy tratando de hacer un login simple donde se ingresa el usuario, password y se consulta en la BD si el usuario existe y me muestre un mensaje de confirmación, pero el problema es cuando llamo el procedimiento en PHP la consulta me llega vacia, pero si lo pruebo en la consola de mysql el procedimiento me devuelve los datos correctos.

codigo de la tabla, la base de datos se llama usuariosbanco
Código:
CREATE TABLE IF NOT EXISTS `usuarios` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Nombre` varchar(100) NOT NULL,
  `Password` varchar(100) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `usuarios` (`Id`, `Nombre`, `Password`) VALUES
(1, 'Anna', 'admin');
1.Aqui esta el codigo del procedmiento almacenado
Código:
CREATE PROCEDURE precioDolar5(
  IN  nom         varchar (100),
  OUT nombi       varchar(100),
  OUT passo       varchar(100)
)
BEGIN
 DECLARE c CURSOR
 FOR SELECT nombre, password
       FROM usuarios u
       WHERE u.nombre = nom;
 SET nombi = "";
 SET passo = "";
 OPEN c;
   FETCH c INTO nombi, passo;
 CLOSE c; 
SELECT @nombi,@passo;
END$$
2. Codigo PHP que ejecuta el procedmiento y valida
Código PHP:
<?php

session_start
();

if (isset(
$_POST['login'])) {
    
$username $_POST['username'];
    
$password $_POST['password'];
    echo 
$username;

    if (
$username == "" && $password "") {
        require 
"../Forms/Login.php";
    } else {
        
$link mysql_connect("localhost""root""");
        
mysql_select_db("usuariosbanco"$link);

        
$consulta mysql_query("call precioDolar5('" $username "',@nombi,@passo)") or die('La consulta fallo;:' mysql_error());
        
$rowValues = Array();
        while (
$linea mysql_fetch_array($consultaMYSQL_ASSOC)) {
            foreach (
$linea as $valor_col) {
                
$rowValues[] = $valor_col;
            }
        }
        if (
$password == $rowValues[1] && $rowValues[0] == $username) {
            echo 
"datos correctos";
        } else {
            echo 
'Sus datos no son correctos';
        }
    }
}
if (isset(
$_GET['start'])) {
    require 
"../Forms/index.php";
}
?>
3.Formulario que envia la petición
Código HTML:
<html>
    <head>
        <title>Bienvenido</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <LINK REL=StyleSheet HREF="../Themes/skin.css" TYPE="text/css" MEDIA=screen>
    </head>
    <body>
    <center>
        <form action = "../events/eventsFrmLogin.php" method ="post">
            Username: <input type="text" name="username" value=""><br>
            Password: <input type="password" name="password" value=""><br>
            <input type="submit" name="login" value="login"><br>
        </form>
    </center>
</body>
</html> 
4. Index de la aplicación PHP
Código PHP:
<?php
// put your code here
header("location:Events/eventsFrmLogin.php?start=yes");
?>
Si me pueden ayudar se los agradeceria pues no he encontrado la solución
  #2 (permalink)  
Antiguo 05/05/2013, 18:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP y procedimientos almacenados

Es que en realidad no estás consultando en el último SELECT las variables que usas de parámetros...
Para MySQL el par de variables@nombi y @passo, no son lo mismo que las variables nombi y passo. Las primeras son variables de usuario de MySQL, mientras que las segunda son variables locales del SP.
Por otro lado, todo el uso del cursos es innecesario en el contexto de la consulta que se pretende.

Código MySQL:
Ver original
  1. CREATE PROCEDURE precioDolar5(
  2.   IN  nom         varchar (100))
  3.     SELECT nombre, password
  4.     FROM usuarios u
  5.     WHERE u.nombre = nom;
  6. END$$
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/05/2013, 18:35
 
Fecha de Ingreso: octubre-2009
Mensajes: 29
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: PHP y procedimientos almacenados

Muchas gracias por la respuesta ya corregi el error en el SQL pero al llamarlo en PHP me sigue devolviendo vacio y por ende no me valida la consulta.
El problema es que el array $rowValues no se esta llenando pero la consulta en el procedimiento me esta devolviendo los datos correctos...



te agradezco si me puedes ayudar
  #4 (permalink)  
Antiguo 05/05/2013, 20:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP y procedimientos almacenados

¿Por qué pruebas usar usas directamente el ejemplo que te di, y lees el resultado como si de una consulta común fuese?
¿Sigues usando el mismo código de consultas? (por cierto, noto que estás usando la librería MYSQL, te recomendaría pasarte a MYSQLI, ya que la que usas está obsoleta y será eventualmente descartada).
En esencia, lo que pleanteé te devolverá una tabla, como si se tratase de un SELECT común y silvestre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: formulario, html, mysql, procedimientos, select, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:15.