質問: htmlspecialchars($_POST["keyword"]); $stmt->bindValue(':maker_id', $maker_id); $stmt->bindValue(':item_name', $item_name); $stmt->bindValue(':price', $price); $stmt->bindValue(':keyword', $keyword); $stmt->execute(); var_dump($maker_id); var_dump($item_name); var_dump($price); var_dump($keyword); } catch(PDOException $Exception) { die('接続エラー:'.$Exception->getMessage()); } ?> 登録完了しました。 TOPに戻る ``` ### 試したこと ### 補足情報(言語/FW/ツール等のバージョンなど) MAMPを使用しています
回答: つきなみですが・・・ PHP: PDO::commit - Manual commit()してない。 PHP: PDO::beginTransaction - Manual beginTransaction()していなければ、オートコミットが働いてDBに反映されるはずかもしれませんが、一応動作モードを確認しておいたほうが良いかも。 $_POSTを参照してデータ抽出する箇所が、何かおかしい。 こうなんじゃない? ``` $maker_id = htmlspecialchars($_POST["maker_id"]); $item_name = htmlspecialchars($_POST["item_name"]); $price = htmlspecialchars($_POST["price"]); $keyword = htmlspecialchars($_POST["keyword"]); ``` さらに、 PHP: PDOStatement::bindValue - Manual PHP: PDOStatement::bindParam - Manual bindValue()するところで、上記リファレンスページの例1の事例に習うと ``` $stmt->bindValue(':maker_id', $maker_id); $stmt->bindValue(':item_name', $item_name); $stmt->bindValue(':price', $price); $stmt->bindValue(':keyword', $keyword); ``` となりそうです。 bindParam()は**SELECT文の実行結果を受け取るための変数のバインド**であって、 今回のコードはbindValue()が適切です。 bindParam()と間違えて書いた箇所がNULLとして扱われ、 テーブルのNULL禁止に引っかかって反映されない、みたいな話なのかなと。 また、データ格納先テーブルの構造がわからないのであてずっぽうですが、 省略してはいけないカラムがあるのにNULLもしくは空文字列でINSERTしようとしているとか。 **テーブルの構造も示して**くれれば原因究明につながりやすいかも。 ところで、`$maker_id`がテーブルでの主キーになりそうな気がしますが、 それもフォーム上で入力させるんですか? 番号がかぶったりしても平気なのでしょうか。 【追記】 ちゃんとINSERT INTO文が動くかの確認として、 `$stmt->execute();`の直前にでも、 ``` var_dump($maker_id); var_dump($item_name); var_dump($price); var_dump($keyword); ``` を入れてみたり、また、`$pdo = new PDO(~`の直後にでも SELECT文のクエリーを実行して値の取得ができるかを確認するとか。