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

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

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

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

Q&A

解決済

1回答

7192閲覧

Connection failed: SQLSTATE[HY000] [1045]

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2017/08/12 04:58

編集2017/08/12 06:57

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>

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

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

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

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

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

s8_chu

2017/08/12 06:38

function.phpの内容を追記していただけませんか?
退会済みユーザー

退会済みユーザー

2017/08/12 06:58

追記しました、遅くなり申し訳ございません。
guest

回答1

0

ベストアンサー

とりあえず、下記のコードで検証してみましたが正常に接続出来ました。(dbname,user,pass全て'test'という名前の環境にしています。)

PHP

1$dsn = 'mysql:host=localhost;dbname=test;charset=utf8'; 2$user = 'test'; 3$pass = 'test'; 4$dbh = new PDO($dsn,$user,$pass);

$userにrootが設定されていますが、パスワードも併せて設定されていませんか?
(提示されているエラーは、パスワードの誤りなどの接続情報の不具合によっても発生します。)

ご自身の環境を見直されてみては如何でしょうか?

投稿2017/08/12 05:07

motuo

総合スコア3027

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

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

退会済みユーザー

退会済みユーザー

2017/08/12 05:28

config.inc.phpにて確認したところやはり user:root password:空白 でした。 phpmyadminでもログイン求められて入力したところこれでログインできました。 これでちゃんと動かない理由となると、コーディングしたファイルに間違いがありそうでしょうか・・・
motuo

2017/08/12 05:37

コーディング内容よりも、MySQL側の設定の問題な気がします。 下記のサイトが解決の参考になるのではないでしょうか… https://dev.mysql.com/doc/refman/5.6/ja/access-denied.html もしくは、そのDBにアクセス権のあるユーザーを作成してみて接続が出来るかどうか試してみては如何でしょうか?
退会済みユーザー

退会済みユーザー

2017/08/12 05:39

申し訳ないです、なぜか時間差でregister_check.phpは動きました。 ですが、CSRFトークンのログがなぜかブラウザに出てきてしまいます。 これは問題ないのでしょうか・・・。
motuo

2017/08/12 05:43

すいません。ついていけなくなりつつあるのですが…「register_check.php」というのは、提示されているPHPのソースの事でしょうか? 「CSRFトークンのログがなぜかブラウザに出てきてしまいます」というのは、「CSRFトークンのログ」とは具体的に何を指していて、どのページのどこに表示されているのでしょうか? いずれにせよ、CSRFの件とDB接続の件は無関係と思いますが…
退会済みユーザー

退会済みユーザー

2017/08/12 05:50

説明不足で申し訳ないです。 register.phpからポストを受け取った時に、 Array ( [error_status] => 0 [token] => 675511b667f5e5828237f6c8566998c5 ) という文がブラウザに出力されます。これがregister_check.phpを見直してCSRFトークンのログなのかと思ったのですが…違いますか? 一回更新するごとに=>の後の英数字列が変わるのでregenerated_idがブラウザに出力されてしまっているのでしょうか・・・よくわかりません
motuo

2017/08/12 05:58

print_r($_SESSION);が原因では?
退会済みユーザー

退会済みユーザー

2017/08/12 06:05

すみません、この記事にした後、print_rとerror_reportingなどの文はコメントアウトしてます。 それなのにさっきのようなログが出てしまうので・・・
motuo

2017/08/12 06:08

ソースを見る限り、どこかにprint_r($_SESSION);があるのだと思いますが… あと、無駄なやり取りを防ぐためにも最新のソースをアップロードしておいた方が良いと思います。
退会済みユーザー

退会済みユーザー

2017/08/12 06:37

何度も申し訳ないです・・・。 エラーレポートのコードはコメントアウトしたものにしました。
motuo

2017/08/12 06:45

すいませんが、私の環境では再現することが出来ませんでした。これ以上の回答は難しいです… Array ( [error_status] => 0 [token] => 675511b667f5e5828237f6c8566998c5 ) 上記の文は、$_SESSIONに格納している値だと思います。 恐らく、このソース以外にも、print_r($_SESSION); という処理があるのだと思います。 一度、grep等をして確認してみる、または修正したソースがサーバ上で稼働している事を確認してみては如何でしょうか?
退会済みユーザー

退会済みユーザー

2017/08/12 06:54

本当に申し訳ないです・・・。今、念のため他のファイルも含めてコメントアウトじゃなくエラーレポートに関するコードを全部消したら、先ほどのような文が出なくなりました。。 普通はコメントアウトしたらコードは一度利かなくなりますよね? エラーレポートだけ例外だったりするんでしょうか・・・。
motuo

2017/08/12 06:56

多分ですが、「他のファイルも含めて」というところが肝だったのではないでしょうか? コメントアウトしたらコードは、もちろん動きません。エラーレポートも例外ではないはずです。
退会済みユーザー

退会済みユーザー

2017/08/12 07:02

ちょっと不可解ですけど、とりあえず解決できてよかったです。 本当に、ていねいにありがとうございました。 他のファイルも含めて見直す重要性の認識を少しは深められたと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問