Как я могу вернуть подготовленный оператор pdo, чтобы проверить, существует ли пользователь, а затем вернуть туда идентификатор из базы данных? - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь создать метод, чтобы проверить, существует ли пользователь, и если он существует, вернуть его идентификатор из базы данных.В прошлом я всегда использовал mysql_fetch_array после моего запроса, а затем я использовал array_shift ($ result_array) для получения идентификатора.Доказано, что это вызов с подготовленными заявлениями.Вот мой метод:

<?php
require_once("db.php");

class User extends Database{

    public $dbFields = array('username', 'password');

    public $tableName = "users";
    public $id;
    public $username;
    public $password;

    // public function auth($user, $pass){
    //  $this->username = $user;
    //  $this->password = $pass;

    // }

    public function authenticate($username = '', $password = ''){
    if(!empty($username) && !empty($password)){
        $stmt  = "SELECT * FROM users ";
        $stmt .= "WHERE username =:username ";
        $stmt .= "AND password =:password ";
        $stmt  = $this->db->prepare($stmt); 
        if($result = $stmt->execute(array(':username' => $username, ':password' => $password))){
            if ($result = $stmt->fetch(PDO::FETCH_ASSOC)){
                return $result;
            } else {
                return print("false");
            }
        }else{
            return print("false false");
        }
    }
    }
}
?> 

Это может быть неактуально, но вот страница формы:

if (isset($_POST['submit'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
    $user = new User();
    $user->authenticate($username, $password);

}
?>
<html>
<head>
    <title>test</title>
</head>
<body>
<form action = "test.php" method= "POST" accept-charset="utf-8" >
 <p>Username
        <input type="text" name="username" maxlength="30" value="" />
     </p>
     <p>Password
        <input type="password" name="password" maxlength="30" value="" />
     </p>
     <p><input type="submit" name="submit" value="Continue &rarr;"></p>
</form>

</body>
</html>

Я успешно использую pdo на всехмои другие методы БД, так что я действительно не хочу переключаться обратно на стандартную инструкцию MySQL, если я могу помочь.Любой совет?

Редактировать: изменен синтаксис в массиве выполнения в соответствии с рекомендациями Криса.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

php не раскрывает переменные в строках, разделенных одинарными кавычками.

используйте что-то вроде

array(':username' => $username, ':password' => $password)

Кроме того, ваша переменная $ result является ассоциативным массивом, как вы привыкли.

return $result['id'];

обратите внимание, функция печати возвращает значение 1. Я действительно не думаю, что вы хотите возвращать это значение из вашей функции аутентификации. Как вы узнаете, является ли 1 кем-то идентификатором пользователя или возвращаемым значением print? вместо этого верните логическое значение false, чтобы указать сбой.

0 голосов
/ 05 декабря 2011

Вы хотите выходную переменную в вашем подготовленном утверждении. Синтаксис обычно такой:

Создать процедуру ИМЯ ПРОЦЕДУРЫ (OUTPUTVARNAME DBTYPE out)

но это будет варьироваться в зависимости от реализации базы данных. Попробуйте: http://www.php.net/manual/en/book.pdo.php#68398

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