PHP - Consultas preparadas en php

   
Vista:

Consultas preparadas en php

Publicado por Damian (62 intervenciones) el 13/10/2014 15:36:21
Hola, estaba realizando las consultas preparadas con PDO pero al ejecutar la consulta no hace nada. El código lo tengo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (isset($_POST['btnEnviar2'])){
	 if($_POST['Nick2'] and $_POST['Pass2']) {
 
	$sql = $pdo->prepare("select CodUser,Usuario,Mail,Pass from `usuarios` where binary Pass=:Pass2 and (binary Usuario=:Nick2 or binary Mail=:Nick2");
	$sql->bindParam(':Pass2', "'".$_POST['Pass2']."'");
	$sql->bindParam(':Nick2', "'".$_POST['Nick2']."'");
	$sql->bindParam(':Nick2', "'".$_POST['Nick2']."'");
	$sql->execute();
	$result = $sql->fetch();

			  if($result<>0) {	
				}else{
					echo "<div id='txtRes'>Los datos ingresados son incorrectos. Intente de nuevo.<br>";
					echo "Recuerde que si aún no ha creado una cuenta, debe hacerla desde la opción 'Nuevo jugador'.</div>";
					$bandera=true;
			}
             }
}

1) No se que debería devolver $result, de todas formas no hace nada. Ingreso el nick y la contraseña válidas pero no pasa nada. Quizás me falta agregar algo más.

2) Otra cosa que pasa es que me muestra en la barra de direcciones algo como: Nick2=dimaria&Pass2=infoweb&btnEnviar2=Empezar
o sea veo que pasan bien los parámetros, de todas formas no quiero que se muestre esa información en donde se escribe la URL.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consultas preparadas en php

Publicado por Damian (62 intervenciones) el 13/10/2014 15:56:18
Me había olvidado de agregarle el: PDO::PARAM_STR quedando:
$sql->bindParam(':Pass2', "'".$_POST['Pass2']."'",PDO::PARAM_STR);

en cada uno de los parámetros...pero igual no hace nada :(

Ahora estoy probando de la otra forma:

1
2
3
4
5
6
7
8
9
10
11
try
    {
        $find = $dbh->prepare("select CodUser,Usuario,Mail,Pass from `usuarios` where binary Pass=? and (binary Usuario=? or binary Mail=?");
        $find -> execute(array("'".$_POST['Pass2']."'","'".$_POST['Nick2']."'","'".$_POST['Nick2']."'"));
        $count = $find -> rowCount();
        print ("Rows found: ". $count);
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
Y lo mismo no hace nada. Decir que la conexión con $dbh está bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Consultas preparadas en php

Publicado por xve (5515 intervenciones) el 13/10/2014 21:50:14
Hola Damian, aquí creo que tienes un error...

PDO gestiona las comillas, por lo que no tienes que poner ninguna comilla, a no ser que quieras que este en la variable... aunque no creo que ese sea el problema.

Creo que esta linea, tiene que ser:
1
$find -> execute(array($_POST['Pass2'],$_POST['Nick2'],$_POST['Nick2']));

El resto de código lo veo correcto...

No te da ningún error? puedes revisar que tengas configurado para que te muestre los errores, o revisar que la consulta funciona correctamente?
También puedes revisar el log del apache... si hay algún error, ahí te lo mostrara.


Revisando, veo que te falta cerrar un paréntesis en la consulta SQL... de seguro que en el log del apache tienes el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consultas preparadas en php

Publicado por Damian (62 intervenciones) el 13/10/2014 23:12:34
No hay caso no consigo hacer que inserte. Les saque las comillas, cerré ese paréntesis y lo mismo, no hace nada. Lo raro es que no me tira ningun error. Salta justo con el mensaje que tengo de que: "El usuario tal ha sido creado correctamente". Pero voy a MySQL para ver los resgistros y no está.
Como configuro para que me muestre algún error o algo.

Otra cosa que me interesa saber, tengo el siguiente código:
1
2
3
4
5
6
7
$_SESSION['usrN']=trim($_POST['Nick']);
   $sth=$dbh->prepare("select CodUser from usuarios where Usuario=?");
   $sth->execute(array($_POST['usrN']));
			//if($row=$sth->fetch(PDO::FETCH_ASSOC)){
			if($row=$sth->fetchAll()){
				$_SESSION['cod']=$row['CodUser'];
			}
Acá me interesa saber, ¿en el if que debo poner para llegar al $row?. He probado con fetch(), fetchAll y fetch(PDO::FETCH_ASSOC) y nada de nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Consultas preparadas en php

Publicado por xve (5515 intervenciones) el 14/10/2014 08:48:58
Hola Damian, estas hablando de insertar registros, y todo lo que nos muestras son SELECT...

Has revisado el log del Apache?

Esto es correcto?
1
$sth->execute(array($_POST['usrN']));
No deberia ser?
1
$sth->execute(array($_SESSION['usrN']));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consultas preparadas en php

Publicado por Damian (62 intervenciones) el 14/10/2014 14:18:07
Si lo que pasa es que primero inserto y luego hago un select. A eso me refiero que no inserta. Y el código que me corriges ya lo había corregido, me olvide de ponerlo bien aca.
Te dejo el insert y luego con su select:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
try {
        $sql="INSERT INTO usuarios
            (
                Nombre,Apellido,Nick,Email,Pass,Pais,Estado,Ciudad
            )VALUES(
                ?, ?, ?, ?, ?, ?, ?, ?
            )";
        $stm=$dbh->prepare($sql);
$stm>execute(array($_POST['Nombre'],$_POST['Apellido'],$_POST['Nick'],$_POST['Email'],$_POST['Pass'],$_POST['Pais'],$_POST['Estado'],$_POST['Ciudad']));
    } catch(PDOException $err) {
        echo "<pre>".print_r($err,true)."</pre>";
        exit();
   }
   $_SESSION['usrN']=trim($_POST['Nick']);
   $sth=$dbh->prepare("select CodUser from usuarios where Usuario=?");
   $sth->execute(array($_SESSION['usrN']));
			//if($row=$sth->fetch(PDO::FETCH_ASSOC)){
			if($row=$sth->fetchAll()){
				$_SESSION['cod']=$row['CodUser'];
			}
   echo "<form id='frJgo' method='post'>";
   echo "<div id='txtRes'>Usuario <span style='color:#036'>".$_SESSION['usrN']."</span> creado correctamente. ¿Desea empezar a jugar ahora?";
   echo "<br>";
   echo "<input type='submit' name='Aceptar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
   echo "<input type='submit' name='Cancelar' id='Cancelar' value='Ahora no'></div>";

Cómo digo no me sale ningún error. Me sale que el usuario se creo correctamente, pero en MySQL no me inserta nada. Probe también en cada tabla y campo con las comillas simples (`) y es lo mismo.
¿Dónde me tengo que fijar lo del log en apache (está dentro de su carpeta o dentro de mi proyecto)?
¿Está bien preguntar por if($row=$sth->fetchAll())? ¿O cuál debería ser para recorrer los $row?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Consultas preparadas en php

Publicado por xve (5515 intervenciones) el 14/10/2014 18:04:26
Hola Damian, esta linea esta mal:
1
$stm>execute(...
tendria que ser así:
1
$stm->execute(...

Puede ser que tengan en tu PHP desactivados los errores en pantalla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consultas preparadas en php

Publicado por Damian (62 intervenciones) el 14/10/2014 22:26:34
Pasó que pase mal el código, en realidad está ese "->". Así que eso no es el problema.
Con respecto a lo otro, ,o creo que tenga desactivado los errores, ya que antes usaba las otras consultas y me tiraba errores si algo andaba mal. Quizás para PDO hay que habilitar algo más.
Lo que si es que no entra en el bloque catch{}. Porque dentro del try{} tengo:
1
echo "A&ntilde;adido con el ID: ".$dbh->lastInsertId();
y en la página me sale el mensaje: Añadido con el ID: 0
No se si eso está bien, que tire un 0 (cero).

Me parece que voy a pasar todo a MySQLi, ya que es más similar a como lo tenía antes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar