Hola Undercoders, Necesito de su ayuda. Estoy trabajando localmente en XAMMP,y estoy haciendo un formulario de login. Al llenar el formulario y darle "enviar" me aparece lo siguiente:
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\Prueba2\funciones\comprueba_login.php:15 Stack trace: #0 C:\xampp\htdocs\Prueba2\funciones\comprueba_login.php(15): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\Prueba2\funciones\comprueba_login.php on line 15
aqui les dejo mi codigo:
<?php
require_once "conexion.php";
session_start();
$_SESSION["usuario"]=$_POST["login"];
$login=htmlentities(addslashes($_POST["login"]));
$password=htmlentities(addslashes($_POST["password"]));
$contador=0;
$sql="SELECT * FROM login WHERE usuario= :login";
$resultado=$pdo->prepare($sql);
$resultado->execute(array(":login"->$login));
while($registro=$resultado->fetch(PDO::FETCH_ASSOC)){
if (password_verify($password, $registro['password'])){
$contador++;
}
}
if($contador>0){
header("location:bienvenida.php");
}else{
header("location:../login.php");
}
$resultado->closeCursor();
?>
Les agradeceria mucho si me ayudan,Undercoders. Gracias.
Buenas noches hermano, te comento, tu código esta bien, solo que en está línea de acá.
$sql="SELECT * FROM login WHERE usuario= :login";
tienes un caracter invalido. Ese select, debería ser asi:
$sql="SELECT * FROM login WHERE usuario= $login";
Prueba y nos comentas. Saludos
:'( Disculpa mi anterior respuesta, me apresuré demasiado. Prueba hacer tu prepare statement de alguna de estas dos manera:
1.-
<?php
/* Ejecuta una sentencia preparada pasando un array de valores */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>
o de está otra:
<?php
/* Ejecuta una sentencia preparada pasando un array de valores */
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();
?>
Usando el signo de (?) esa info la busqué de la página oficial de Php.
https://www.php.net/manual/es/pdo.prepare.php (https://www.php.net/manual/es/pdo.prepare.php)