mysqli_stmt :: bind_result (): Число переменных привязки не соответствует количеству полей в подготовленном сообщении

Я пытался закодировать форму входа в PHP с помощью подготовленного оператора, но каждый раз, когда я пытаюсь войти в систему, я получаю следующую ошибку:

mysqli_stmt :: bind_result (): Число переменных привязки не соответствует количеству полей в подготовленном сообщении

Вот мой код:

<?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"; } } ?> 

Может кто-нибудь сказать мне, почему это происходит?

Если это действительно ваш код, может быть, что либо $ _POST ["name"], либо $ _POST ["password"] – это массив, так что bind_param связывает больше одного значения.

Проверьте:

 var_dump($_POST["name"]); var_dump($_POST["password"]); 
 $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); 

Ваш синтаксис выбора был неправильным, правильный синтаксис – SELECT field1, field2, field3 FROM TABLE WHERE field1 = ? AND field2 = ? SELECT field1, field2, field3 FROM TABLE WHERE field1 = ? AND field2 = ?

Чтобы выбрать больше полей, просто разделите их запятой, а не AND

Кроме того, я понимаю, что вы сохраняете свои пароли в открытом тексте, что является плохой практикой, рассмотрите возможность их использования с помощью многочисленных функций хэширования, таких как sha1()