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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

1回答

1115閲覧

気づけばプロ並みPHP改訂版③ DB接続

hamuneko12

総合スコア4

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2023/01/15 23:14

編集2023/01/19 13:11

前提

ここに質問の内容を詳しく書いてください。

PHPの学習を再度はじめようと思い、環境を再構築しました。
気づけばプロ並みPHP改訂版の73ぺーじの2-4-1のデータベースの
接続ですが、try-catch文でどうしてもcatch文の取得がされてしまい、
スタッフ名の登録が行いない状況です。

有識者の方、ご助言をお願いします。

実現したいこと

データベースを接続し、スタッフ名を登録できるようにする

発生している問題・エラーメッセージ

原因を調べるためcatchに下記を入力し,出力してみました。
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

該当のソースコード

<?php try { $staff_name=$_POST['name']; $staff_pass=$_POST['pass']; $staff_name=htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); $staff_pass=htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password='root'; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql='INSERT INTO mst_staff (name,password) VALUES (?,?)'; $stmt=$dbh->prepare($sql); $data[]=$staff_name; $data[]=$staff_pass; $stmt->execute($data); $dbh=null; print $staff_name; print 'さんを追加しました。<br />'; } catch(Exception $e) { print 'ただいま障害により大変ご迷惑をお掛けしております。'; print $e->getMessage(); exit(); } ?> <a href="staff_list.php"> 戻る</a>

試したこと

・入力に誤りがないか確認をするため、書籍のサンプルコードを張り付けた

補足情報(FW/ツールのバージョンなど)

◆使用しているもの◆

windows10
xampp 7.4.1
php 7.4.1
Apache 2.4.41
mysql Ver 15.1 Distrib 10.4.11-MariaDB

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/01/16 01:45

ソースコードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。インデントされてないコードは質問者さんも見る気がしないのでは?
y_waiwai

2023/01/16 02:11

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
hamuneko12

2023/01/16 03:42

ご指摘ありがとうございます。 バッククォートを三つ加えました。 よろしくお願い致します。
m.ts10806

2023/01/16 07:49

タイトルに書籍名や項目タイトルを入れて要件にはなり得ないので、ご自身の表現で解決したいことや実現したいことを記載してください。 あと、当該書籍は名前だけという評価は多いです。 当該書籍利用者のteratailに駆け込んできている人が多いことがその理由の一つです。 改訂版でマシになっているという話は聞きますが、それでもタイトルの名前負け感は拭えません。 セキュリティ対策の甘さなどもあげられます。
guest

回答1

0

エラーメッセージてググってみるといいと思います。

[【MySQL】PHPで接続できないとき SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client](https://motomotosukiyaki.com/mysql-from-php-server-requested-authentication-method-unknown-to-the-client

書籍の情報が古い場合もありますので、エラーメッセージでググるクセをつけるといいです。

投稿2023/01/16 00:27

編集2023/01/16 00:27
mksk

総合スコア247

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

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

hamuneko12

2023/01/16 03:42

言葉足らずですみません。エラーコードを確認し、 このページまではたどりついていました。 ターミナルはxamppからはいり入力をする流れになりますでしょうか?
mksk

2023/01/16 04:12

なるほど。それは失礼しました。 > ターミナルはxamppからはいり入力をする流れになりますでしょうか? そうですね。 xamppは使ったことがないのですが、以下の流れかと思います。 1. xammpのMySQLにターミナルから接続。 この辺りが参考になる? 参考: https://laboratory.kazuuu.net/start-and-operate-mysql-started-with-xampp-from-the-command-prompt/ 2. ユーザーの認証方式を旧式の「mysql_native_password」に変更する 3. xampp再起動 こちらで一度試してみてください。
hamuneko12

2023/01/18 00:21

1. xammpのMySQLにターミナルから接続。 ⇒ここまでは完了しました。 2. ユーザーの認証方式を旧式の「mysql_native_password」に変更する ⇒1の後に「mysql_native_password」を入力するのでしょうか?  CMDに「->」が出てきたのですが、処理としてはどのように行えばいいでしょうか? よろしくお願い致します。
mksk

2023/01/19 04:11

xammpのMySQLにターミナルから接続までできたんですね。 そしたら、[【MySQL】PHPで接続できないとき SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client](https://motomotosukiyaki.com/mysql-from-php-server-requested-authentication-method-unknown-to-the-client) を参考に認証方法を変更します。 ``` # hogeとパスワードの部分は変更してください mysql> alter user 'hoge'@'localhost' identified with mysql_native_password by 'ここにパスワード'; # 確認 mysql> mysql> select user, host, plugin from user; ``` > CMDに「->」が出てきたのですが、処理としてはどのように行えばいいでしょうか? コマンドの最後に `;` をつけ忘れていませんか? `;` がないと、どこまでがコマンドかMySQLが認識できなくて、ずっと入力を待ち続けてしまいます。 おそらくこれじゃないかなぁと思いますが、違ったらコメントください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問