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>