Как исправить функцию запуска готовых операторов в PDO из mysqli - PullRequest
0 голосов
/ 29 сентября 2019

Я переписал соединение с базой данных из 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

Что я сделал не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...