上記を参考にして、さくらのVPSで借りたVPSにCentOS7を入れて、LAMP環境を構築しました。
yum install --enablerepo=remi,remi-php73
で php-pdo, php-mysqlndなどを入れ、
PHP
1 $dsn = "mysql:host=localhost; dbname=login_test; charset=utf8"; 2 $username = "※※※※※※※※"; //伏せております 3 $password = "※※※※※※※※"; //伏せております 4 try { 5 $dbh = new PDO($dsn, $username, $password, 6 [ 7 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 8 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 9 ]); 10 } catch (PDOException $e) { 11 12 exit($e->getMessage()); 13 }
で動かしましたが、どうやらDBの取得ができていないようです。
(exitにより空白のページが表示される)
php.iniなどのファイルをいじらないといけないのかもしれませんが、どの部分をいじればよいかわかりません。
つたない質問で申し訳ありませんが、ご教授いただけると助かります。
情報不足ですみません。
・phpと同じサーバなのか(コード内でlocalhostを指定しているので同じであると予想)
→VPSに登録して、CENTOS7、APACHE、MariaDB、phpを入れていますので、同じサーバ―だと思います。
・ソフトウェアは何か
→MariaDBです
・バージョン
「mysql --version」で以下が表示されました。
Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
です。
・DBは起動しているか
「systemctl status maridb」で
active(running)と表示されました。
・作成したデータベースは何か(コード内で指定しているlogin_testと予想)
はい。login_testです。
・ユーザは作成したのか。権限付与したのか
mariadbのほうでユーザーを作成して、login_testにのみ権限付与しました。
・phpではなく、データベースのコマンド操作で同じ結果を得られているのか
mariadb内でDB作成しましたので、そのあたりは大丈夫と思います。
また、
php
1} catch (PDOException $e) { 2echo "in catch clause<br>"; 3exit($e->getMessage()); 4} 5echo "exception not occurred<br>";
を入れると、exception not occurredが表示されます。
追記2
php
1 <?php 2 3 4 function h($str) 5 { 6 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 7 } 8 9 session_start(); 10 $name = $_POST['name']; 11 $dsn = "mysql:host=localhost; dbname=login_test; charset=utf8"; 12 $username = "※※※※※※"; 13 $password = "※※※※※※"; 14 try { 15 $dbh = new PDO($dsn, $username, $password, 16 [ 17 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 18 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 19 ]); 20 } 21 catch (PDOException $e) { 22 echo "in catch clause<br>"; 23 exit($e->getMessage()); 24 } 25 echo "exception not occurred<br>"; 26 var_dump($dbh); 27 var_dump($e); 28 29 30 $sql = "SELECT * FROM users WHERE name = :name"; 31 $stmt = $dbh->prepare($sql); 32 $stmt->bindValue(':name', $name); 33 $stmt->execute(); 34 $member = $stmt->fetch(); //配列で取得 35 36 if (password_verify($_POST['num'], $member['num'])) { 37 //DBのユーザー情報をセッションに保存 38 $_SESSION['name'] = $member['name']; 39 $_SESSION['num'] = $member['num']; 40 $msg = 'ログインしました。'; 41 $link = '<a href="index.php">ホーム</a>'; 42 } else { 43 $msg = '名前もしくはパスワードが間違っています。'; 44 $link = '<a href="index.php">戻る</a>'; 45 } 46 ?> 47 48 49<!DOCTYPE html> 50<html lang="ja"> 51 <head> 52 <meta charset="utf-8"> 53 <link rel="icon" href="favicon.ico"> 54 <link rel="stylesheet" href="css/practicestyle.css"> 55 <title>login</title> 56 </head> 57 58 <body> 59 60 61 <h1><?= h($msg); ?></h1> 62 <?php echo $link; ?> 63 64 </body> 65</html> 66
が全コードとなります。
var_dump($dbh);で「object(PDO)#1 (0) { }」と表示されます。
回答2件
あなたの回答
tips
プレビュー