はじめに
はじめは勉強のためにMDB2を先にやろうかと思ったら、
いろいろと情報がないこともあり、時間もなく断念。
PDOならなんとかなるかと思うのと、PDOで試験出るならやっぱりやらないとあかんかなと
思ったので、つないでみることにした
コマンドでMYSQLに入る
https://qiita.com/fuwamaki/items/194c2a82bd6865f26045
これを参考にしました。
なぜかというと、まずはMDB2から入ろうかと思ってここからやっていたのがきっかけ。
で、すでに入ったことがあるので、
コマンドラインから
mysql -u root -h localhost -p
ここでログイン
SHOW DATABASE
ここでデータベースを確認して、すでに作った「test」があるのを確認
SELECT User,Host FROM mysql.user;
次にユーザーについても確認
rootがあったので、パスワードを設定して退出
create user 'root' identified by '******';
quit;
※*はもちろんパスワードを入れる
create user 'pdouser' identified by '******';
SELECT user, host FROM mysql.user;
flush privileges;
あたらしくユーザーとパスを作って
ユーザー一覧にあるのを確認して
反映。
なぜかhostが%になってた。
GRANT ALL PRIVILEGES ON test.* to 'atsublue'@'localhost';
ここでなぜかERROR 1410 (42000)がでて、できない。
ちなみにこれはシンタックスエラーがあるんじゃないかと言われている。
MAMPのPHPは5.7.32で、ERROR 1410 (42000)が出るはずはない。
MYSQL8ならば、下記の様な方法ができるが。
https://qiita.com/yamateion/items/5509484aaf1a02e9cc57
そこではたと気づいた。
MAMPからmyPHPAdominに行ってDBがあるのかどうか調べようと思った。
入り方は下記
https://qiita.com/mako0104/items/cb677d04922a3d9672ae
すると、
DBにtestはおろか、ユーザーにpdouserが入っていない。
ここでつまった。
でやっと気づいた。
冒頭で、なぜか、MAMP内にはいらず、MySQLに入っていたことに。
それだと、前にHomeblewで入れていたMYSQLに入ってしまうことに。
あわてて、mysqlのバージョンを確認した。
やはり、8.0だった笑
https://qiita.com/rokumura7/items/b270acb9550efddd5fe5
ということで、
cd /Applications/MAMP/Library/bin/
./mysql -u root -p
ここで、パスワード入力画面が出るのだが、
私はずっと勘違いしていたせいで、MAMPのMySQLには入っていないので
パスワードはrootのはずだ、と思ってこれを入れるとログインできた
さてデータベースを作り、show databases
で作ったDBがあるのを確認。
下のpdotestdbはDB名で、好きなものを入れてOK
create database pdotestdb;
次に、ユーザーも作り、このユーザーでDBにアクセスできるように設定
pdouserがユーザー名で、
localhostはホスト名
pdotestdbは上記で設定したDB名
mysql> create user 'pdouser'@'localhost' identified by '(好きなパスワード)';
mysql> grant all privileges on pdotestdb.* to 'pdouser'@'localhost';
ここまでうまくいった。
さて、ここでphpからPDOでmySQLにつなぐ
下のポート番号はMAMPにあったポート番号。
charsetはこれしないと文字化けになるのであったほうがいい。
<?php
$dsn = 'mysql:host=localhost;port:8889;dbname=pdotestdb;charset=utf8';
$DB_user = 'pdouser';
$DB_pass = '(上記で設定したパスワード)';
try{
$db = new PDO($dsn,$DB_user,$DB_pass);
echo "接続成功";
} catch(PDOException $e){
echo "接続失敗" . $e->getMessage() ."<br>";
?>
接続成功 と書かれた画面が出力され、うまくいきました!
追記
パスワードがrootのままだとセキュリティ上危ないので変更
下記のリンクを参考に
ただ、quitしたあとにもとに戻るのに、また、
cd /Applications/MAMP/Library/bin/
しないといけないので面倒だ。。。
そんなときには「パスを通す」ことをやればいいらしいです。(メモ)
https://webkaru.net/mysql/mamp-command-line/
今回はテストと勉強でつないでいるだけなので、今はいいかなと思ってやっていない。
必要であれば上記を参考に。
さらに追記
上のようにやっても、接続はできても、それ以降のことができないことがあった。
そのときは、今使いたいDB を、useすれば使えるようになる。
$db=>exec('use テーブル名');
このあとに、SQL 文をつくって実行する感じ。