phpここに言語を入力
1 2 3 4<?php 5 6 7 8// MySQL接続情報 9$host = 'localhost'; // データベースのホスト名又はIPアドレス 10$user = 'username'; // MySQLのユーザ名 11$passwd = 'passwd'; // MySQLのパスワード 12$dbname = 'dbname'; // データベース名 13 14$customer_id = 1; // 例題のため顧客は1に固定 15$payment = 'クレジット'; // 例題のため購入方法はクレジットに固定する 16$quantity = 1; // 例題のため数量は1に固定 17$goods_list = array(); 18$err_msg = array(); 19 20// コネクション取得 21if ($link = mysqli_connect($host, $user, $passwd, $dbname)) { 22 23 // 文字コードセット 24 mysqli_set_charset($link, 'UTF8'); 25 26 // 購入処理 27 if( $_SERVER['REQUEST_METHOD'] === 'POST' ) { 28 29 // 現在時刻を取得 30 $date = date('Y-m-d H:i:s'); 31 32 // 商品IDを取得 33 $goods_id = (int) $_POST['goods_id']; 34 35 // 更新系の処理を行う前にトランザクション開始(オートコミットをオフ) 36 mysqli_autocommit($link, false); 37 38 /** 39 * 発注情報を挿入 40 */ 41 42 // 挿入情報をまとめる 43 $data = array( 44 'customer_id' => $customer_id, 45 'order_date' => $date, 46 'payment' => $payment 47 ); 48 49 // insertのSQL 50 $sql = 'INSERT INTO order_table (customer_id, order_date, payment) VALUES(\'' . implode('\',\'', $data) . '\')'; 51 52 // insertを実行する 53 if (mysqli_query($link, $sql) === TRUE) { 54 55 // A_Iを取得 56 $order_id = ### mysqli_insert_id($link); 57 58 /** 59 * 発注詳細情報を挿入 60 */ 61 62 // 挿入情報をまとめる 63 $data = array( 64 'order_id' => $order_id, 65 'goods_id' => $goods_id, 66 'quantity' => $quantity 67 ); 68 69 // 注文詳細情報をinsertする 70 $sql = 'INSERT INTO order_detail_table (order_id, goods_id, quantity) VALUES(\'' . implode('\',\'', $data) . '\')'; 71 72 // insertを実行する 73 if (mysqli_query($link, $sql) !== TRUE) { 74 $err_msg[] = 'order_detail_table: insertエラー:' . $sql; 75 } 76 77 } else { 78 $err_msg[] = 'order_table: insertエラー:' . $sql; 79 } 80 81 // トランザクション成否判定 82 if (count($err_msg) === 0) { 83 // 処理確定 84 mysqli_commit($link); 85 } else { 86 // 処理取消 87 mysqli_rollback($link); 88 } 89 90 } 91 92 /** 93 * 商品情報を取得 94 */ 95 96 // SQL 97 $sql = 'SELECT goods_id, goods_name, price FROM goods_table'; 98 99 // クエリ実行 100 if ($result = mysqli_query($link, $sql)) { 101 102 $i = 0; 103 while ($row = mysqli_fetch_assoc($result)) { 104 $goods_list[$i]['goods_id'] = htmlspecialchars($row['goods_id'], ENT_QUOTES, 'UTF-8'); 105 $goods_list[$i]['goods_name'] = htmlspecialchars($row['goods_name'], ENT_QUOTES, 'UTF-8'); 106 $goods_list[$i]['price'] = htmlspecialchars($row['price'], ENT_QUOTES, 'UTF-8'); 107 $i++; 108 } 109 110 111 } else { 112 $err_msg[] = 'SQL失敗:' . $sql; 113 } 114 115 mysqli_free_result($result); 116 mysqli_close($link); 117 118} else { 119 $err_msg[] = 'error: ' . mysqli_connect_error(); 120} 121 122//var_dump($err_msg); // エラーの確認が必要ならばコメントを外す 123 124?> 125 126<!DOCTYPE HTML> 127<html lang="ja"> 128<head> 129 <meta charset="UTF-8"> 130 <title>トランザクションサンプル</title> 131</head> 132<body> 133 <section> 134 <h1>商品購入</h1> 135 <ul> 136<?php foreach ($goods_list as $goods) { ?> 137 <li> 138 <span><?php print $goods['goods_name']; ?></span> 139 <span><?php print $goods['price']; ?>円</span> 140 141 <form method="post"> 142 <input type="hidden" name="goods_id" value="<?php print $goods['goods_id']; ?>"> 143 <input type="submit" value="購入する"> 144 </form> 145 </li> 146<?php } ?> 147 </ul> 148 <p>※サンプルのため購入は1商品 & 1個に固定</p> 149 </section> 150</body> 151</html> 152```コード 153 154質問 155//A_Iを取得のところでmysqli_insert_id($link)の意味が直近のidを取得ということだと思うのですが具体的にどういうことかいまいち理解できません。
質問がAUTO INCREMENTnに関することならPHPではなくデータベース寄りの問題なのでタグに「MySQL」や「データベース」等を追加された方が良いのでは。
回答2件
あなたの回答
tips
プレビュー