PHPをPHP7.1にバージョンアップしました。
すると、ブラウザ上に「could not find driver」というエラーが表示されるようになりました。
ドライバーがないのか、ただ繋がってないのか、よくわかりません。
どこを見ればわかるのか教えてください。よろしくお願いします。
ログイン処理の時にこのエラーが表示されました。
phpをバージョンアップする前は、ちゃんと動いていました。バージョンアップさせた途端、上記のエラーが表示されるようになりました。
login.php
<?php require_once(__DIR__ . '/../../config/config.php'); $app = new MyApp\Controller\Login(); $app->run(); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>LogIn</title> <link rel="stylesheet" href="../styles.css"> </head> <body> <div class="container"> <form action="" method="post" id="login"> <p><input type="text" name="email" placeholder="email" value="<?= isset($app->getValues()->email) ? h($app->getValues()->email) : ''; ?>"></p> <p><input type="password" name="password" placeholder="password"></p> <p class="err"><?= ($app->getErrors('login') !== '') ? h($app->getErrors('login')) : ''; ?></p> <div class="btn" onclick="document.getElementById('login').submit();">ログイン</div> <input type="hidden" name="token" value="<?= h($_SESSION['token']); ?>"> </form> </div> </body> </html>
Login.php
<?php namespace MyApp\Controller; class Login extends \MyApp\Controller{ public function run(){ if ($this->isLoggedIn()) { header('Location: '. SITE_URL); exit(); } if($_SERVER['REQUEST_METHOD'] === 'POST'){ $this->postProcess(); } } protected function postProcess(){ try{ $this->_validate(); } catch(\MyApp\Exception\EmptyPost $e){ $this->setErrors('login', $e->getMessage()); } $this->setValues('email', $_POST['email']); if($this->hasError()){ return; }else{ try{ $userModel = new \MyApp\Model\User(); $user = $userModel->login([ 'email' => $_POST['email'], 'password' => $_POST['password'] ]); }catch(\MyApp\Exception\UnmatchEmailOrPassword $e){ $this->setErrors('login', $e->getMessage()); return; } // login処理 // sessionハイジャック対策 session_regenerate_id(true); $_SESSION['me'] = $user; // redirect to home header('Location: '. SITE_URL); exit; } } private function _validate(){ if(!isset($_POST['token']) || $_POST['token'] !== $_SESSION['token']){ echo "Invalid Token!"; exit; } if(!isset($_POST['email']) || !isset($_POST['password'])){ echo "Invalid Form!"; exit; } if($_POST['email'] === '' || $_POST['password'] === ''){ throw new \MyApp\Exception\EmptyPost(); } } }
User.php
namespace MyApp\Model; class User extends \MyApp\Model { public function login($values) { $stmt = $this->db->prepare("select * from admin where email = :email"); $stmt->execute([ ':email' => $values['email'] ]); $stmt->setFetchMode(\PDO::FETCH_CLASS, 'stdClass'); $user = $stmt->fetch(); if (empty($user)) { throw new \MyApp\Exception\UnmatchEmailOrPassword(); } if (!password_verify($values['password'], $user->password)) { throw new \MyApp\Exception\UnmatchEmailOrPassword(); } return $user; } }
Model.php
<?php namespace MyApp; class Model{ protected $db; public function __construct(){ try{ $this->db = new \PDO(DSN, DB_USERNAME, DB_PASSWORD); }catch(\PDOException $e){ echo $e->getMessage(); exit; } } } コード
回答1件
あなたの回答
tips
プレビュー