以前、こちらを参考にPHPのログインページを作り、活用していたのですが、レンタルサーバーを変えてログインしてみたところ、ログインできず、SQLSTATE[HY000] [1045] Access denied for user '〇〇'@'localhost' (using password: YES)が出てしまうようになってしまいました。サーバーはWebArena SuiteXです。以前のサーバーではこのコードで問題なく動作していたのですが、このサーバーでは拒否されてしまいます。ユーザー名やパスワードも新しいサーバーに合わせて何度も見直しましたがやはりできませんでした。
しかし、ログインせずにmysqlのデータを表示することはできています。サーバー付属のphpmyadminを使っていますが以前のサーバーより制限があるためどこを弄れば良いのかわかりません。何が原因でしょうか?
php
1<?php 2require 'password.php'; // password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用 3// セッション開始 4session_start(); 5 6$db['host'] = "***"; // DBサーバのURL 7$db['user'] = "***"; // ユーザー名 8$db['pass'] = "******"; // ユーザー名のパスワード 9$db['dbname'] = "testdb"; // データベース名 10 11// エラーメッセージの初期化 12$errorMessage = ""; 13 14// ログインボタンが押された場合 15if (isset($_POST["login"])) { 16 // 1. ユーザIDの入力チェック 17 if (empty($_POST["userid"])) { // emptyは値が空のとき 18 $errorMessage = 'IDが入力されていません。'; 19 } else if (empty($_POST["password"])) { 20 $errorMessage = 'パスワードが入力されていません。'; 21 } 22 23 if (!empty($_POST["userid"]) && !empty($_POST["password"])) { 24 // 入力したユーザIDを格納 25 $userid = $_POST["userid"]; 26 27 // 2. ユーザIDとパスワードが入力されていたら認証する 28 $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']); 29 30 // 3. エラー処理 31 try { 32 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 33 34 $stmt = $pdo->prepare('SELECT * FROM abcd WHERE id = ?'); 35 36 $stmt->execute(array($userid)); 37 38 $password = $_POST["password"]; 39 40 if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 41 if (password_verify($password, $row['password'])) { 42 session_regenerate_id(true); 43 44 // セッション関連 45 46 47 $_SESSION["NAME"] = $row['name']; 48 $_SESSION["ID"] = $row['id']; 49 50 51 //セッション追加 52 53 54 55 header("Location: test.php"); // メイン画面へ遷移 56 exit(); // 処理終了 57 } else { 58 // 認証失敗 59 $errorMessage = 'IDまたはパスワードに間違いがあります。'; 60 } 61 } else { 62 // 4. 認証成功なら、セッションIDを新規に発行する 63 // 該当データなし 64 $errorMessage = 'IDまたはパスワードに間違いがあります。'; 65 } 66 } catch (PDOException $e) { 67 $errorMessage = 'データベースエラー'; 68 //$errorMessage = $sql; 69 // $e->getMessage() でエラー内容を参照可能(デバック時のみ表示) 70 echo $e->getMessage(); 71 } 72 } 73} 74?>
↓こちらのコードで接続し、SELECTするとデータは表示されます。上記のログイン時と同じホスト名データベース名ユーザ名パスワードを使用しています。
php
1<?php 2$dsn = 'mysql:****;dbname=testdb;charset=utf8'; 3$user = '****'; 4$password = '********'; 5try { 6 $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 7 8} catch (PDOException $e) { 9 10 echo 'データベースにアクセスできません!' . $e->getMessage(); 11 12 exit; 13 14} 15?>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/25 08:23