Помогите. Я получаю 0 num_rows, но если я выполняю запрос в консоли, я получаю результаты. Я немного подготовлен к подготовке stmts. Вот мой код
Класс подключения к базе данных:
class DbConnection { const HOST = "localhost"; const USR = "root"; const PWD = ""; const DB = "club_db"; }
Класс входа:
class UsrLogin extends DbConnection { private $conn; /*db connector*/ /*login vars*/ private $usr; private $pwd; /*ctrl var*/ public $AccessGranted = false; function __construct($username,$password){ /*initialize db connection*/ $this->conn = new mysqli(DbConnection::HOST,DbConnection::USR,DbConnection::PWD,DbConnection::DB); /*set login vars*/ $this->usr = $username; $this->pwd = $password; } public function login(){ $sql = "SELECT * FROM sys_usr WHERE uid = ? AND passwd = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("ss", $usr,$pwd); $usr = $this->usr; $pwd = $this->pwd; $stmt->execute(); echo $stmt->num_rows; } }
Хотя, на мой взгляд, два приведенных здесь ответа неверны, я думаю, что знаю, где проблема.
Ну, во-первых, как сказано, нет необходимости присваивать значения переменным, прежде чем связывать их. Это совсем не так. Это меня злит, потому что я читал это снова и снова здесь, в stackoverflow … и не так. Просто. Неправильно. Если бы это было так, вы не смогли бы выполнить несколько подготовленных операторов с разными значениями. Даже если его старые и многие люди не любят видеть это здесь, оликан из W3: https://www.w3schools.com/php/php_mysql_prepared_statements.asp Это показывает, что то, что вы пытаетесь, вполне возможно, и оно также показывает, что у вас есть готовые заявления.
Итак, теперь к вашей проблеме:
То, что вы делаете, совершенно нормально. Но есть еще одна вещь, которую вам не хватает, и я думаю, что это причина ошибки. Отсутствует store_result()
.
Дайте этому коду шанс и скажите, работает ли он:
public function login(){ $sql = "SELECT * FROM sys_usr WHERE uid = ? AND passwd = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("ss", $usr,$pwd); $usr = $this->usr; $pwd = $this->pwd; $stmt->execute(); $stmt->store_result(); // Quite sure you need this to perform a num_rows... echo $stmt->num_rows; }