回答編集履歴
4
加筆修正
    
        answer	
    CHANGED
    
    | 
         @@ -27,6 +27,8 @@ 
     | 
|
| 
       27 
27 
     | 
    
         
             
            となりそうです。
         
     | 
| 
       28 
28 
     | 
    
         
             
            bindParam()は**SELECT文の実行結果を受け取るための変数のバインド**であって、
         
     | 
| 
       29 
29 
     | 
    
         
             
            今回のコードはbindValue()が適切です。
         
     | 
| 
      
 30 
     | 
    
         
            +
            bindParam()と間違えて書いた箇所がNULLとして扱われ、
         
     | 
| 
      
 31 
     | 
    
         
            +
            テーブルのNULL禁止に引っかかって反映されない、みたいな話なのかなと。
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
       31 
33 
     | 
    
         | 
| 
       32 
34 
     | 
    
         
             
            また、データ格納先テーブルの構造がわからないのであてずっぽうですが、
         
     | 
3
加筆修正
    
        answer	
    CHANGED
    
    | 
         @@ -14,6 +14,21 @@ 
     | 
|
| 
       14 
14 
     | 
    
         
             
            $keyword = htmlspecialchars($_POST["keyword"]); 
         
     | 
| 
       15 
15 
     | 
    
         
             
            ```
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
            さらに、
         
     | 
| 
      
 18 
     | 
    
         
            +
            [PHP: PDOStatement::bindValue - Manual](http://php.net/manual/ja/pdostatement.bindvalue.php)
         
     | 
| 
      
 19 
     | 
    
         
            +
            [PHP: PDOStatement::bindParam - Manual](http://php.net/manual/ja/pdostatement.bindparam.php)
         
     | 
| 
      
 20 
     | 
    
         
            +
            bindValue()するところで、上記リファレンスページの例1の事例に習うと
         
     | 
| 
      
 21 
     | 
    
         
            +
            ```php
         
     | 
| 
      
 22 
     | 
    
         
            +
            $stmt->bindValue(':maker_id', $maker_id);
         
     | 
| 
      
 23 
     | 
    
         
            +
            $stmt->bindValue(':item_name', $item_name);
         
     | 
| 
      
 24 
     | 
    
         
            +
            $stmt->bindValue(':price', $price);
         
     | 
| 
      
 25 
     | 
    
         
            +
            $stmt->bindValue(':keyword', $keyword);
         
     | 
| 
      
 26 
     | 
    
         
            +
            ```
         
     | 
| 
      
 27 
     | 
    
         
            +
            となりそうです。
         
     | 
| 
      
 28 
     | 
    
         
            +
            bindParam()は**SELECT文の実行結果を受け取るための変数のバインド**であって、
         
     | 
| 
      
 29 
     | 
    
         
            +
            今回のコードはbindValue()が適切です。
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       17 
32 
     | 
    
         
             
            また、データ格納先テーブルの構造がわからないのであてずっぽうですが、
         
     | 
| 
       18 
33 
     | 
    
         
             
            省略してはいけないカラムがあるのにNULLもしくは空文字列でINSERTしようとしているとか。
         
     | 
| 
       19 
34 
     | 
    
         
             
            **テーブルの構造も示して**くれれば原因究明につながりやすいかも。
         
     | 
2
加筆修正
    
        answer	
    CHANGED
    
    | 
         @@ -20,4 +20,16 @@ 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            ところで、`$maker_id`がテーブルでの主キーになりそうな気がしますが、
         
     | 
| 
       22 
22 
     | 
    
         
             
            それもフォーム上で入力させるんですか?
         
     | 
| 
       23 
     | 
    
         
            -
            番号がかぶったりしても平気なのでしょうか。
         
     | 
| 
      
 23 
     | 
    
         
            +
            番号がかぶったりしても平気なのでしょうか。
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            【追記】
         
     | 
| 
      
 26 
     | 
    
         
            +
            ちゃんとINSERT INTO文が動くかの確認として、
         
     | 
| 
      
 27 
     | 
    
         
            +
            `$stmt->execute();`の直前にでも、
         
     | 
| 
      
 28 
     | 
    
         
            +
            ```php
         
     | 
| 
      
 29 
     | 
    
         
            +
            var_dump($maker_id);
         
     | 
| 
      
 30 
     | 
    
         
            +
            var_dump($item_name);
         
     | 
| 
      
 31 
     | 
    
         
            +
            var_dump($price);
         
     | 
| 
      
 32 
     | 
    
         
            +
            var_dump($keyword);
         
     | 
| 
      
 33 
     | 
    
         
            +
            ```
         
     | 
| 
      
 34 
     | 
    
         
            +
            を入れてみたり、また、`$pdo = new PDO(~`の直後にでも
         
     | 
| 
      
 35 
     | 
    
         
            +
            SELECT文のクエリーを実行して値の取得ができるかを確認するとか。
         
     | 
1
加筆修正
    
        answer	
    CHANGED
    
    | 
         @@ -2,8 +2,11 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            [PHP: PDO::commit - Manual](http://php.net/manual/ja/pdo.commit.php)
         
     | 
| 
       4 
4 
     | 
    
         
             
            commit()してない。
         
     | 
| 
      
 5 
     | 
    
         
            +
            [PHP: PDO::beginTransaction - Manual](http://php.net/manual/ja/pdo.begintransaction.php)
         
     | 
| 
      
 6 
     | 
    
         
            +
            beginTransaction()していなければ、オートコミットが働いてDBに反映されるはずかもしれませんが、一応動作モードを確認しておいたほうが良いかも。
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
       6 
8 
     | 
    
         
             
            $_POSTを参照してデータ抽出する箇所が、何かおかしい。
         
     | 
| 
      
 9 
     | 
    
         
            +
            こうなんじゃない?
         
     | 
| 
       7 
10 
     | 
    
         
             
            ```php
         
     | 
| 
       8 
11 
     | 
    
         
             
            $maker_id = htmlspecialchars($_POST["maker_id"]);
         
     | 
| 
       9 
12 
     | 
    
         
             
            $item_name = htmlspecialchars($_POST["item_name"]);
         
     | 
| 
         @@ -13,6 +16,7 @@ 
     | 
|
| 
       13 
16 
     | 
    
         | 
| 
       14 
17 
     | 
    
         
             
            また、データ格納先テーブルの構造がわからないのであてずっぽうですが、
         
     | 
| 
       15 
18 
     | 
    
         
             
            省略してはいけないカラムがあるのにNULLもしくは空文字列でINSERTしようとしているとか。
         
     | 
| 
      
 19 
     | 
    
         
            +
            **テーブルの構造も示して**くれれば原因究明につながりやすいかも。
         
     | 
| 
       16 
20 
     | 
    
         | 
| 
       17 
21 
     | 
    
         
             
            ところで、`$maker_id`がテーブルでの主キーになりそうな気がしますが、
         
     | 
| 
       18 
22 
     | 
    
         
             
            それもフォーム上で入力させるんですか?
         
     |