質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

32655閲覧

could not find driverというエラーについて

koyomi

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/10/06 01:31

編集2017/10/06 01:55

PHPをPHP7.1にバージョンアップしました。
すると、ブラウザ上に「could not find driver」というエラーが表示されるようになりました。
ドライバーがないのか、ただ繋がってないのか、よくわかりません。
どこを見ればわかるのか教えてください。よろしくお願いします。

エラーは次のように表示されます。
イメージ説明

phpinfo()のPDOはこのようになっています。
イメージ説明

phpのモジュールはこのようになっています。
[イメージ説明]

ログイン処理の時にこのエラーが表示されました。
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; } } } コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/10/06 01:34

エラー全文をお願いします。該当のドライバーがあるのかないのかは確認しましたか?
m.ts10806

2017/10/06 01:40

PDOの件が追記されていますが、このエラーはどのようにしたときに起きたのでしょうか?ソースコードがあるのでしたらそのソースコードもご提示願います。
koyomi

2017/10/06 01:56

ソースコードを追加致しました。ログイン処理をするコードです。エラーはPDOから発せられたものだと思います。
guest

回答1

0

ベストアンサー

PDOにsqliteしか反映されていないのが原因ですね。
タグについているところからmysqlを利用したいということでしょうか。

下記の記事を参考にして調整してみてください。

投稿2017/10/06 02:02

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koyomi

2017/10/06 02:59

ありがとうございます!無事解決しました!
m.ts10806

2017/10/06 03:01

解決したようでなによりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問