PHP PDO запрос не возвращает никаких данных, isset () показывает, что данные возвращаются - PullRequest
0 голосов
/ 24 октября 2019

У меня есть некоторый базовый код php, который пытается аутентифицироваться по имени пользователя и паролю в базе данных. Предполагается, что будет напечатано «Аутентифицировано» в случае успешного совпадения user & pass. Тем не менее, запрос не возвращает никаких данных. Кроме того, isset (), который я использую, чтобы проверить, возвращаются ли какие-либо данные, показывает, что в массиве есть значения.

Что здесь не так, как я могу получить этот запрос pdo для возврата запрошенных данных?

Вот код с проблемами.

    $stmt = $pd->prepare("SELECT username from users where username = :logon and password = :passwd");
    $stmt->bindParam(':logon', $_POST['username'], PDO::PARAM_STR);
    $stmt->bindParam(':passwd', $_POST['password'], PDO::PARAM_STR);
    $stmt->execute();
    $verify_auth = $stmt->fetchAll();
    if(isset($verify_auth)){
       echo "Authenticated locally";
       $authed = 1;
       //do something here
    }
    elseif($authed != 1){
        echo "<b>Failure to authenticate</b>";
    }

Каждый раз, когда он запускается «Аутентифицируется локально», даже если учетные данные неверны.

Появляется массив verify_authвсегда быть пустым даже с правильными учетными данными.

Параметры записи назначаются успешно.

1 Ответ

1 голос
/ 24 октября 2019

fetchAll() всегда возвращает массив, вам нужно проверить, не является ли он пустым. Также вы устанавливаете $authed на 1 после проверки на $verify_auth, и оказывается, что последний блок условий (в случае, если $authed != 1) никогда не будет выполнен. Вместо этого вы можете сделать это полезным с помощью простого else. Вот пример того, как это будет выглядеть.

$stmt = $pd->prepare("SELECT username from users where username = :logon and password = :passwd");

$stmt->bindParam(':logon', $_POST['username'], PDO::PARAM_STR);
$stmt->bindParam(':passwd', $_POST['password'], PDO::PARAM_STR);
$stmt->execute();
$verify_auth = $stmt->fetchAll();

if ($verify_auth) {
  echo "Authenticated locally";
  $authed = 1;
  //do something here
} else {
  echo "<b>Failure to authenticate</b>";
}

isset() очень полезно, но не в данном конкретном случае. Он проверяет, установлена ​​ли переменная, поэтому, даже если оно имеет пустое значение, оно будет установлено, и isset() даст вам true. Но если существует переменная или индекс массива, который не существует, он даст false. В вашем конкретном случае вы можете использовать isset($verify_auth[0]), который даст вам true, если в массиве есть что-то, возвращенное $stmt->fetchAll().

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