こんにちは、現在研修でPHP+DBでCRUD機能をつけた掲示板を作成しているのですがPHPとDBでうまく接続ができなかった為、共有したいと思います。なんかの参考になれば幸いです。
QそもそもなぜなかなかDB接続できなかったのか。
try{
$db = new PDO('mysql:dbname=php_db;host=localhost;charset=utf8', 'root', 'root');
} catch (PDOException $e) {
echo 'DB接続エラー'. $e -> getMessage();
}
上記のコードがMySQLと接続する際のコードになるのですが、PDOというPHPに接続するための関数の第一引数にデーターベース名とhost名、文字コードなどを指定でき、第二引数にユーザーの権限、第三引数にパスワードを入力しないといけないとのことですが、XAMPPを使用している方なら第三引数を特に指定せず ' ' だけでいいらしいのですがMAMP環境下だと第三引数にパスワードを指定しないといけなく、私は省略していいものだと思ってずっと接続できずにいました。アホでした。笑
Qどうやってテーブルにユーザー情報を格納したのか
これ、他のエンジニア様のコードや参考書に記載されているコード色々拝見したのですが、どれもわかりずらくそのままコピペしてもうまくいかなったんですよね。もしかしたら私のコードを他のエンジニア様がご覧になった際には怒られてしまうかもしれませんが一応うまくいったので共有します。
<?php
session_start();
require('../db/connect.php');
//HTMLのコードが並ぶ
$statement = $db->prepare('INSERT INTO users SET name=?, email=?, password=?');
$statement -> execute(array(
$_POST['name'],
$_POST['email'],
password_hash($_POST['password'], PASSWORD_DEFAULT)
));
?>
session_startと記載することでpostした情報を取得することができます。それを利用してテーブルに情報を格納していく形になります。
requireは先ほどのDB接続しているファイルを読み込んでいます。何回も同じ文を書きたくないですからね。
次にprepareと記載することでより安全にDBに情報を格納できるとのことだったので記載しております。引数にSQL文を記載していく形になります。INSERT INTOでユーザー情報を格納しています。
name = ?というのが下の文に書いてある$_POST['name']に入っている値が?の情報になります。
?に置き換わっているカラムの数だけ記載してあります。
最後にパスワードをハッシュ化してDBに格納します。
最後に
自分はWeb系の企業に就職して初めてPHPを書いています。
PHPだけで掲示板サイト作るのとか勉強していないし無理ーーーー😱とか思ってました。意外となんとかなっているというのが今の現状です。
今までは独学でRuby on Railsの勉強をしていました。
フレームワークってあんなにも便利だったんだなと改めて実感しています。
早く先輩方に追いつけるように日々頑張っていかないといけませんね。