Я переписал соединение с базой данных из mysqli в PDO.Мое соединение работает с подготовленными заявлениями.В классе, который работал с mysqli, была эта функция:
function runBaseQuery($query)
{
$result = mysqli_query($this->conn, $query);
while ($row = mysqli_fetch_assoc($result)) {
$resultset[] = $row;
}
if (!empty($resultset))
return $resultset;
}
function runQuery($query, $param_type, $param_value_array)
{
$sql = $this->conn->prepare($query);
$this->bindQueryParams($sql, $param_type, $param_value_array);
$sql->execute();
$result = $sql->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$resultset[] = $row;
}
}
if (!empty($resultset)) {
return $resultset;
}
}
function bindQueryParams($sql, $param_type, $param_value_array)
{
$param_value_reference[] = &$param_type;
for ($i = 0; $i < count($param_value_array); $i++) {
$param_value_reference[] = &$param_value_array[$i];
}
call_user_func_array(array(
$sql,
'bind_param'
), $param_value_reference);
}
Я переписал их для подключения PDO вот так.
public function __call($method, $args)
{
return call_user_func_array(array($this->pdo, $method), $args);
}
public function run($sql, $args = [])
{
if (!$args)
{
return $this->query($sql);
}
$stmt = $this->pdo->prepare($sql);
$stmt->execute($args);
return $stmt;
}
Подключение к базе данных с новым классом PDOработает четко.Но когда я хочу войти в систему как пользователь, у меня есть «Неверный логин».Однако логин и пароль были правильными.
Моя функция, класс авторизации был в mysqli:
public function getMemberByUsername($username) {
$db_handle = new DBController();
$query = "Select * from `members` where member_name = ?";
$result = $db_handle->runQuery($query, 's', array($username));
return $result;
}
Я переписал эту функцию так:
public function __construct()
{
$this->db = DBController::instance();
}
function getMemberByUsername($username) {
$this->data = $this->db->run("Select * from `members` where `member_name` = ?",[$username])->fetch();
}
Ниже код, который работает с функцией getMemberByUsername
if (! empty($_POST["login"])) {
$isAuthenticated = false;
$username = $_POST["member_name"];
$password = $_POST["member_password"];
$user = $auth->getMemberByUsername($username);
//var_dump($user); //null
if (password_verify($password, $user[0]["member_password"])) {
$isAuthenticated = true;
}
//var_dump($isAuthenticated); //false
Что я сделал не так?