Connection failed: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password:
データベースへの接続自体ができていないようなので、
どうしたらいいのかがわかりません。
現在引っかかっているコードは下記のものです。
先ほど質問したコードでもデータベースのやり取りに問題があるようでしたので、こちらも含めて解決したいです、よろしくお願いします。
<?php // error_reporting(E_ALL); // ini_set('display_errors', 1); require_once("function.php"); session_start(); header("Content-type: text/html; charset=utf-8"); $_SESSION["token"] = get_csrf_token(); $id = $_POST['id']; $mail = $_POST["mail"]; $password = $_POST["password"]; $confirm_password = $_POST["confirm_password"]; if($password != $confirm_password){ //pass不一致 $_SESSION["error_status"] = 1; header("HTTP/1.1 301 Moved Permanently"); header("Location: register.php"); exit(); } //IDcheck //DB接続 ※ $dsn = 'mysql:host=localhost;dbname=portfolio;charset=utf8'; $user = 'root'; $password = ''; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //プレースホルダでSQL作成 ※ $sql = "SELECT COUNT(*) AS CNT FROM USER WHERE ID = ?;"; //パラメータの型指定 ※ $stmt = $dbh->prepare($sql, array('text')); //パラメータを渡してSQL実行 $rs = $stmt->execute(array($id)); // try{ // $pdo = new PDO( // 'mysql:host=localhost;dbname=portfolio;charset=utf8', // 'root', // ''; // [ // PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // PDO::ATTR_DEFAULT_FETCH_MODE => PDO:: FETCH_ASSOC, // ] // ); // }catch(PDOException $e){ // header('Content-Type: text/plain; charset=UTF-8', true , 500); // exit($e->getMessage()); // } try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } while ($row = $stmt->fetch()){ $count = $row['CNT']; } $dbh = null; //IDがすでに登録されていた場合 if($count != 0){ $_SESSION['error_status'] = 2; header("HTTP/1.1 301 Moved Permanently"); header("Location: register.php"); exit(); } //エラー情報リセット $_SESSION['error_status'] = 0; // print_r($_SESSION); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <form action="register_submit.php" method="post" > <table border="0"> <tr> <td>ID</td> <td><?php echo htmlspecialchars($id , ENT_QUOTES , "UTF-8"); ?></td> <td>メールアドレス</td> <td><?php echo htmlspecialchars($mail , ENT_QUOTES , "UTF-8"); ?></td> </table> <input type="hidden" name="id" value="<?php echo htmlspecialchars($id , ENT_QUOTES , "UTF-8") ?>" > <input type="hidden" name="mail" value="<?php echo htmlspecialchars($mail , ENT_QUOTES , "UTF-8") ?>" > <input type="hidden" name="password" value="<?php echo htmlspecialchars($password , ENT_QUOTES , "UTF-8") ?>" > <input type="hidden" name="token" value="<?php echo htmlspecialchars($_SESSION['token'] , ENT_QUOTES , "UTF-8") ?>" > <input type="submit" value="登録"> <input type="reset" value="リセット"> <input type="button" value="戻る" onclick="history.back();"> </form> </body> </html> ?>
function.php
<!DOCTYPE html> <?php define("DNS","mysql://user01:pass@localhost/posrtfolio?charset=utf8"); define("SERVER","192.168.11.11"); define("SENDER_EMAIL","root@localhost"); define("STRETCH_COUNT" , 1000); /* CSRFトークン作成 */ function get_csrf_token(){ $TOKEN_LENGTH = 16; $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH); return bin2hex($bytes); } /* パスワードのソルト+ストレッチング */ function stretchedPassword($salt,$password){ $hash_pass=""; for($i = 0; $i<STRETCH_COUNT; $i++){ $hash_pass = hash("sha256",($hash_pass . $salt . $password)); } return $hash_pass; } /* ソルト作成 */ function get_salt(){ $TOKEN_LENGTH = 4;//4*2=8byte $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH); return bin2hex($bytes); } /* URLの一時パスワード作成 */ function get_url_password(){ $TOKEN_LENGTH = 16;//16*2=32byte $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH); return hash("sha256",$bytes); } ?> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> </html>
function.phpの内容を追記していただけませんか?
追記しました、遅くなり申し訳ございません。
回答1件
あなたの回答
tips
プレビュー