【PHP】PHPとMySQLを接続してデータを取得、更新する具体的な流れ
PHPとMySQLを接続してデータを取得、更新する具体的な流れを紹介します。
目次から読む
PHPとMySQLを接続してデータを取得する具体的な流れ
// データベースから値を取得
$user = 'ユーザー名';
$pwd = 'パスワード';
$host = 'localhostなど';
$dbname = 'データベース名';
// dsnは以下の形でどのデータベースかを指定する
$dsn = "mysql:host={$host};port=8889;dbname={$dbname};";
// PDOでデータベースのコネクションを生成
// 第一引数dsn, 第二引数user, 第三引数password
// newでインスタンス化して使う
$conn = new PDO($dsn, $user, $pwd);
// $dsnでdbnameを指定しているのでdb名は省略できる
// 右コマンドで実行されるのでそれを変数に格納する $conn->query('select * from テーブル名');
$pst = $conn->query('select * from テーブル名');
// 実行結果を取得する(連想配列と配列データが被って出力される)
// $result = $pst->fetchAll();
// fetchAll()だけだと被ったデータがでるので連想配列のみに絞る
$result = $pst->fetchAll(PDO::FETCH_ASSOC);
// preタグで囲んで見やすく出力する
echo '<pre>';
print_r($result);
echo '</pre>';
// データ取得後は、コネクションを破棄する
// PDOは以下は書かなくてもいいけど、プログラムによっては必要なので癖付ける
$conn = null;データベース接続に必要な情報を記述
まず、データベース接続に必要な情報を記載します。- ユーザー名
- パスワード
- ホスト名
- データベース名
PDOでコネクションを生成
その次に、PDOでデータベースとのコネクションを生成します。 PDOは、3つの引数をとります。第一引数dsn, 第二引数user, 第三引数passwordとなります。 それをインスタンス化して使います。 コネクションを生成なので、$connなどコネクションとわかる変数に格納します。query()でSQLを実行
PDOのメソッドでquery()にsqlの文を書くことであらゆることが可能になります。 上では普通にSQLを書けばいいです。 SQLの書き方については、データベース基礎知識を参照してみてください。連想配列のみを出力
query()の実行で生成されたオブジェクトは、fetchAll()が使えます。 fetchAll()で実行結果を取得することができます。 そのまま引数を渡さずに実行すると、連想配列と配列が混ざった情報が出るため、連想配列に絞って結果を取得します。(PDO::FETCH_ASSOC)fetchAllとfetch
fetchAllは複数行を取得します。1つでも配列になっています。 fetchは1つだけ取得します。 データを表示したいときは以下のようにします。 $p_id = $conn->query("
select id from mst_products mp
where mp.name = '椅子'
");
// fetchAllのとき
var_dump($p_id->fetchAll()[0]['id']);
// fetchのとき
var_dump($p_id->fetch()['id']);結果を確認する
結果を確認するniha, print_rなどで結果を出力します。 preタグで囲むと見やすくなります。コネクションを破棄する
コネクションの変数にnullを設定することでコネクションを破棄することができます。 PDOの場合は不要なのですが、他のものの場合は、破棄しないと接続がどんどん増えてしまうため、破棄する癖付けのためにもコネクションが終わったらnullを設定してコネクションを破棄するか、このようなことが必要とおぼえておきましょう。デフォルトのフェッチモードを指定する
// newでインスタンス化して使う
$conn = new PDO($dsn, $user, $pwd);
// デフォルトのフェッチモードを指定する
$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// SQLを実行
$pst = $conn->query('select * from テーブル名');
// 上で指定したフェッチモードで実行結果を取得できる
$result = $pst->fetchAll();
上のように、setAttribute()を使うことでPDOのデフォルトのフェッチモードを設定することができます。
デフォルトを設定したら、fetchAll()のを記載したときに、指定したフェッチモードでデータが取れるようになります。
データを更新する
$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// ここより上は同じ
$result = $conn->exec('update テーブル名 set name = "値" where id = 2');
// ここより下は同じ
更新するには、exec()を使用します。
このexec()の結果を表示すると1とか0とか数字が表示されます。
その数字は、上のSQLの実行で影響を受けた行数となります。
0なら影響ないということです。
SQLが正しいかどうかの確認方法
-- SQLが正しいかどうかの確認方法
start transaction;
-- SQLを書く
rollback;
SQLが正しいかどうかの確認するためには、
DBeaverのようなSQLクライアントにクエリを流して、rollbackする方法があります。
その際、トランザクションをスタートして、SQLを実行して、中身を確認します。
その後rollbackします。