statement sentencias prepared preparadas mysqli_stmt_fetch mysqli_stmt_execute mysqli_stmt bind_param php mysql mysqli prepared-statement

sentencias - prepared statement php select



mysqli_stmt:: bind_result(): el número de variables de enlace no coincide con el número de campos en la declaración preparada (2)

Si ese es realmente su código, es posible que $ _POST ["nombre"] o $ _POST ["contraseña"] sea una matriz, de modo que bind_param vincula más de un solo valor.

Comprobar:

var_dump($_POST["name"]); var_dump($_POST["password"]);

He intentado codificar un formulario de inicio de sesión en PHP utilizando una declaración preparada, pero cada vez que intento iniciar sesión obtengo el siguiente error:

mysqli_stmt :: bind_result (): el número de variables de enlace no coincide con el número de campos en la declaración preparada

Aquí está mi código:

<?php session_start(); $mysqli = new mysqli("localhost", "root" , "" , "security"); if(mysqli_connect_errno()){ echo "Wrong" ; } if($stmt = $mysqli->prepare("SELECT username AND password FROM users WHERE username =? AND password =?")){ $username = $_POST[''name'']; $password = $_POST[''password'']; $stmt->bind_param(''ss'' ,$username ,$password); $stmt->execute(); $stmt->bind_result($password ,$username); if($stmt->fetch() == ''true'') { echo "welcome"; } else{ echo "wrong password"; } } ?>

¿Puede alguien decirme por qué sucede esto?


$mysqli->prepare("SELECT username, password FROM users WHERE username = ? AND password = ?"); $username = $_POST[''name'']; $password = $_POST[''password'']; $stmt->bind_param(''ss'' ,$username ,$password); $stmt->execute(); $stmt->bind_result($username ,$password);

Su sintaxis de selección era incorrecta, la sintaxis correcta es SELECT field1, field2, field3 FROM TABLE WHERE field1 = ? AND field2 = ? SELECT field1, field2, field3 FROM TABLE WHERE field1 = ? AND field2 = ?

Para seleccionar más campos, simplemente sepáralos con una coma y no con una AND

Además, me doy cuenta de que estás guardando tus contraseñas en texto plano, lo cual es una mala práctica, considera hashing usando las numerosas funciones de hash como sha1()