teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

加筆修正

2017/04/18 07:42

投稿

退会済みユーザー
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

加筆修正

2017/04/18 07:42

投稿

退会済みユーザー
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

加筆修正

2017/04/18 07:39

投稿

退会済みユーザー
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

加筆修正

2017/04/18 07:32

投稿

退会済みユーザー
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
  それもフォーム上で入力させるんですか?