Случай с PDO не работает с параметрами связывания - PullRequest
0 голосов
/ 31 октября 2019

Я проверяю, существует ли комбинация имени пользователя и пароля в одной из таблиц?

Я делаю это в PDO, используя параметры связывания. Когда страница выполняется, она показывает ошибку: currently unable to handle this request.

Вот мой код:

    $stmtus = $conn->prepare("Select
                case
                when exists (
                Select 1 from School_Profile 
                where aes_decrypt(SchoolEmail, 'SALT') = :Username  and password = :Password
                ) then 'Admin'
                when exists (
                Select 1 from NonAdminUsers 
                where aes_decrypt(Nuser, 'SALT') = :Username and Npassword = :Password
                ) then 'Non Admin'
                else 'Unknown'
                end result");
 $stmtus->bindParam(':Username', $username);
 $stmtus->bindParam(':Password', $password);
 $username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');
 $password = htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8');
 $stmtus -> execute();

Мой журнал ошибок показывает:

PHP Fatal error: Uncaught Error: Call to a member function prepare() on null in

1 Ответ

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

Насколько я знаю, вы не можете повторно использовать именованный параметр более одного раза, что, вероятно, является источником вашей ошибки. Итак, для быстрого обхода, просто не используйте один и тот же параметр дважды или более:

$stmtus = $conn->prepare("SELECT
    CASE WHEN EXISTS (
             SELECT 1 FROM School_Profile
             WHERE AES_DECRYPT(SchoolEmail, 'SALT') = :user1 AND password = :pass1)
         THEN 'Admin'
         WHEN EXISTS (
             SELECT 1 FROM NonAdminUsers
             WHERE AES_DECRYPT(Nuser, 'SALT') = :user2 AND Npassword = :pass2)
         THEN 'Non Admin'
         ELSE 'Unknown'
         END result");

$stmtus->bindParam(':user1', $username);
$stmtus->bindParam(':pass1', $password);
$stmtus->bindParam(':user2', $username);
$stmtus->bindParam(':pass2', $password);
$username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');
$password = htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8');
$stmtus->execute();
...