phpでmysqlのデータベースに以下の内容を登録したいと考えています。
・テーブル名「user_data」にidを登録
・テーブル名「test_data」~「jumacle2」のsub_idに「user_data」のidを登録
しかし、データベースを確認したところ、user_dataにはidが登録されず、test_dataにのみデータが入っている状態です。
(ちなみに気づけばプロ並みPHPを見ながら書いています。)
元々user_dataにのみデータが入り、test_dataには入らない状態だったので色々と書き換えては戻しを繰り返した結果、いつの間にか逆転してしまいました。
```php <?php ini_set("display_errors", "On"); ?> <!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <title>心理学実験|登録完了</title> <style type="text/css"> body{ text-align:center; margin-top:100px; } input[type="submit"]{ width:100px; height:50px; font-size:18px; } input[name="id"]{ width:200px; height:30px; font-size:28px; margin-bottom:50px; } </style> </head> <body> <?php try { $sub_id = $_POST['id']; $sub_id = htmlspecialchars($sub_id); $dsn = 'mysql:dbname=root;host=localhost:3306'; $user = 'root'; $password = ''; $dbh = new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql = 'INSERT INTO user_data(id) VALUES(?)'; $stmt = $dbh->prepare($sql); $data[] = $sub_id; $stmt->execute($data); $sql = 'INSERT INTO test_data(sub_id) VALUES(?)'; $stmt = $dbh->prepare($sql); $stmt->execute($data); $dbh = null; echo $sub_id; echo 'を登録しました。<br/>'; echo '間違いがなければもう一度IDを入力し、事前調査へ進んでください。'; echo '<br/>'; echo '<form method="post" action="sub_login_check.php">'; echo '<br/>'; echo '<input type="text" name="id">'; echo '<input type="submit" value="OK">'; echo '<input type="button" onclick="history.back()" value="戻る">'; echo '</form>'; echo '<a href="sub_login.html">ログイン画面へ</a>'; } catch(Exception $e) { echo 'ただ今障害により大変ご迷惑をおかけしています。'; echo exit(); } ?> </body> </html>
修正後
エラー文として
There is no active transaction
が表示されるようになりました。
<?php try { $sub_id = $_POST['id']; $dsn = 'mysql:dbname=tachibanastudy;host=localhost;port=3306;charset=utf8'; $user = 'tachibanastudy'; $password = 'Ovu21176'; $dbh = new PDO($dsn, $user, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ]); $sql = 'INSERT INTO user_data(id) VALUES(?)'; $stmt = $dbh->prepare($sql); $data[] = $sub_id; $stmt->execute($data); $sql = 'INSERT INTO test_data(sub_id) VALUES(?)'; $stmt = $dbh->prepare($sql); $stmt->execute($data); $dbh->commit(); $dbh = null; echo $sub_id; echo 'を登録しました。<br/>'; echo '間違いがなければもう一度IDを入力し、事前調査へ進んでください。'; echo '<br/>'; echo '<form method="post" action="sub_login_check.php">'; echo '<br/>'; echo '<input type="text" name="id">'; echo '<input type="submit" value="OK">'; echo '<input type="button" onclick="history.back()" value="戻る">'; echo '</form>'; echo '<a href="sub_login.html">ログイン画面へ</a>'; } catch(Exception $e) { echo $e->getMessage(); }; ?>
回答1件
あなたの回答
tips
プレビュー