LoginSignup
2
0

More than 1 year has passed since last update.

MySQL PDOに接続するときのメモ

Last updated at Posted at 2021-06-08

はじめに

はじめは勉強のために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はこれしないと文字化けになるのであったほうがいい。

index.php
<?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 文をつくって実行する感じ。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0