LoginSignup
5
3

More than 3 years have passed since last update.

PHPにてPDOでMySQLに接続して、複数のSQLを実行する

Posted at

1つのPHPファイル内に、INSERTとSELECTのSQLを記載する方法です。
DB接続1回で複数のSQLが実行できます。
2個目のSQLでは配列$dataの値をクリアすることがポイントです。

以下のソースコードは、ユーザーID登録実行画面の想定です。
前画面のユーザーID登録確認画面からユーザー名を受け取り、DB登録しています。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta name="description" content="XXXX">
  <title>XXXX</title>
  <link rel="stylesheet" href="/main.css">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>

<body>
<?php

//データベースの接続エラー対策
try
{
  // POSTメソッドで前の画面の入力値を取得する
  $user_name=$_POST['user_name'];

  //データベースに接続する
  $dsn = 'mysql:dbname=XXXX;host=mysqlXXXX';
  $user = 'XXXX'; //''内にはユーザ名を入力
  $password = 'XXXX';  //''内にはパスワードを入力
  $dbh = new PDO($dsn, $user, $password);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  //7桁数値をランダムで生成する
  $user_id= rand(100000,9999999);

  //ランダムで生成した7桁数値の存在チェック。$user_idがDBに存在する場合、再度ランダム数値を生成する
  $sql ='SELECT COUNT(*) as cnt FROM XXXX_table WHERE user_id=?';
  $stmt = $dbh->prepare($sql);  // prepareメソッドでSQLをセット
  $data[] = $user_id; // 1つ目の?にセットしたいデータが入っている変数を書く
  $stmt->execute($data);  //executeでDBへの処理要求を実行
  $rec=$stmt->fetch(PDO::FETCH_ASSOC);

  // SQL分を使ってレコードを追加
  $sql ='INSERT INTO place_data_table(place_id) VALUES (?)'; //'INSERT INTO~'を変数$sqlに格納する
  $stmt = $dbh->prepare($sql); // prepareメソッドでSQLをセット
  $data = []; // 配列$dataの値をクリア
  $data[] = $user_id; // 1つ目の?にセットしたいデータが入っている変数を書く
  $stmt->execute($data);  //executeでDBへの処理要求を実行

  // データベースから切断する
  $dbh = null;

  //結果を表示
  print $user_name;
  print 'を追加しました。<br />';

}
catch (Exception $e)
{
  /* ?><pre><?= print_r($e, true); ?></pre><?php デバッグの時にはコメントアウトを外す。エラー内容、問題が発生した行番がわかる*/
  print 'ただいま障害により接続できません。';
  exit(); //強制終了の命令
}
?>

<a href="user_list.php">戻る</a>

</body>
</html>

5
3
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
5
3