前提・実現したいこと
phpから、入力した情報をMySQLに格納したいです。
格納する際に、プレースホルダの値を指定したいです。
発生している問題・エラーメッセージ
Uncaught PDOException: SQLSTATE[HY000]: General error: 2031 in C:\MAMP\htdocs\receiveinfo.php:29 Stack trace: #0 C:\MAMP\htdocs\receiveinfo.php(29): PDO->query('INSERT INTO tan...') #1 {main} thrown in C:\MAMP\htdocs\receiveinfo.php on line 29
該当のソースコード
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8">tinnko <title>家計簿</title> </head> <body> <h1>入力フォーム</h1> <form method="post" action="receiveinfo.php"> 日付:<input type="date" name="day_id"><br> 購入品:<input type="text" name="buy_name" required><br> カテゴリ:<select name="category"> <option value="">選択してください</option> <option value="1">食費</option> <option value="2">公共料金</option> <option value="3">日用品</option> <option value="4">車関係</option> <option value="5">その他</option> </select><br> 出費:<input type="number" min="1" max="100000" name="money" required>円<br> 備考:<textarea name="appendix" cols="40" rows="4" maxlength="160"></textarea><br> <input type="submit" value="送信"> </form> </body> </html>
receiveinfo.php
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>家計簿入力結果</title> </head> <body> <?php //print_r($_POST); echo $_POST['buy_name']; echo "<br>"; if ($_POST['category'] === '1') echo "食費"; if ($_POST['category'] === '2') echo "公共料金"; if ($_POST['category'] === '3') echo "日用品"; if ($_POST['category'] === '4') echo "車関係"; if ($_POST['category'] === '5') echo "その他"; echo "<br>"; $user = "keisuke"; $pass = "keisuke090307"; $day_id = $_POST['day_id']; $buy_name = $_POST['buy_name']; $category = (int) $_POST['category']; $money = (int) $_POST['money']; $appendix = $_POST['appendix']; $dbh = new PDO('mysql:host=localhost;dbname=tankdb;charset=utf8', $user, $pass); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO tank (day_id, buy_name, category, money, appendix) VALUES (?, ?, ?, ?, ?)"; $stmt = $dbh->query($sql); $stmt->bindValue(1, $day_id, PDO::PARAM_INT); $stmt->bindValue(2, $buy_name, PDO::PARAM_STR); $stmt->bindValue(3, $category, PDO::PARAM_INT); $stmt->bindValue(4, $money, PDO::PARAM_INT); $stmt->bindValue(5, $appendix, PDO::PARAM_STR); $stmt = execute(); $dbh = null; ?> </body> </html>
試したこと
ネットで調べてみたところ、29行目のqueryは即実行?とあったため、プレースホルダの指定をqueryの前に記述しましたが、そもそも$stmtが定義されていないため指定できませんでした。
day_idはinput typeをdate型と定義しているため、ブレースホルダもINTでもなく、STRでもないものを探してみましたが見当たりませんでした。
参考書を読みながらコードを記述しているのですが、「SQLへの接続方法は~してください。」としか記載されていなったので、ここに助けを求めました。。
ご教授いただければ幸いです。
補足情報(FW/ツールのバージョンなど)
PHP7.2.14
MAMP
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/20 16:18
2020/09/20 16:47
2020/09/24 14:28