質問編集履歴

5

最後の更新内容の通知は誤りです。 申し訳ございません。 文字数が1000文字を超えてしますので、トランザクション追加後のエラーは省きます。 参考になりそうなサイトを見つけたので個人的に取り組みます。

2020/11/15 08:11

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 入力内容チェック後正常にデータベースに反映させたい。
3
+ 入力内容チェック後正常にデータベースに反映させたい。
4
4
 
5
5
 
6
6
 

4

トランザクション追加後のエラー追記。改善方法に関しては参考になりそうなサイトを見つけたので夜取り組みます。

2020/11/15 08:11

投稿

yuuu752
yuuu752

スコア18

test CHANGED
@@ -1 +1 @@
1
- SQLSTATE[HY093] Invalid parameter number: number of bound variables does not match number of tokens
1
+ Invalid parameter number: number of bound variables does not match number of tokens
test CHANGED
@@ -6,12 +6,6 @@
6
6
 
7
7
  ここに質問の内容を詳しく書いてください。
8
8
 
9
- PHPで在庫管理アプリを作っています。
10
-
11
- エラーについて調べたところ引数が異なるとのことでしたが、確認した限りでは引数の間違えは見当たりませんでした。
12
-
13
- 他にどこか怪しい箇所があれば教えて頂きたいです。
14
-
15
9
 
16
10
 
17
11
  [エラー箇所]
@@ -20,8 +14,6 @@
20
14
 
21
15
 
22
16
 
23
-
24
-
25
17
  ### 発生している問題・エラーメッセージ
26
18
 
27
19
 
@@ -976,8 +968,6 @@
976
968
 
977
969
  ### 試したこと
978
970
 
979
- stock_edit_check.phpとstock_edit_done.phpで引数に間違いがないかの確認。
980
-
981
971
 
982
972
 
983
973
  ### 補足情報(FW/ツールのバージョンなど)

3

更新内容:トランザクション処理の追加。

2020/11/15 08:07

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -812,12 +812,16 @@
812
812
 
813
813
  $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
814
814
 
815
+ $dbh->beginTransaction();
816
+
815
817
 
816
818
 
817
819
  $sql='UPDATE stocks SET purchase_date=:purchase_date,deadline=:deadline,stock_name=:stock_name,price=:price,number=:number,gazou=:gazou_name WHERE stock_id=:stock_id';
818
820
 
819
821
  $stmt=$dbh->prepare($sql);
820
822
 
823
+ $dbh->commit();
824
+
821
825
 
822
826
 
823
827
  if(isset($stock_purchase_date))
@@ -930,6 +934,10 @@
930
934
 
931
935
  {
932
936
 
937
+ $dbh->rollBack();
938
+
939
+
940
+
933
941
  echo "エラー発生:" . htmlspecialchars($e->getMessage(),ENT_QUOTES, 'UTF-8') . "<br>";
934
942
 
935
943
  print'ただいま障害により大変ご迷惑をお掛けしております。';

2

更新内容:1.$data[ ]とsql文の修正。2.修正後に発生したエラー文とvar_dump($data);での格納した値の結果。3.stock_edit.php:修正内容入力画面の追加。

2020/11/15 07:39

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -28,7 +28,9 @@
28
28
 
29
29
  ```
30
30
 
31
- SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
31
+ array(6) { [":purchase_date"]=> string(10) "2020-10-26" [":deadline"]=> string(10) "2020-11-26" [":stock_name"]=> string(18) "国産きゅうり" [":price"]=> int(200) [":number"]=> int(10) [":gazou"]=> string(14) "kyuri_yama.jpg" } エラー発生:SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
32
+
33
+ ただいま障害により大変ご迷惑をお掛けしております。
32
34
 
33
35
  ```
34
36
 
@@ -36,6 +38,224 @@
36
38
 
37
39
  ### 該当のソースコード
38
40
 
41
+
42
+
43
+ 「stock_edit.php:修正内容を入力」
44
+
45
+ ```php
46
+
47
+ <?php
48
+
49
+ session_start();
50
+
51
+ session_regenerate_id(true);
52
+
53
+ if(isset($_SESSION['login'])==false)
54
+
55
+ {
56
+
57
+ print'ログインされません。<br />';
58
+
59
+ print'<a href="../user_login/login_form.html">ログイン画面へ</a>';
60
+
61
+ exit();
62
+
63
+ }
64
+
65
+ else
66
+
67
+ {
68
+
69
+ print $_SESSION['user_name'];
70
+
71
+ print'さんログイン中<br />';
72
+
73
+ print'<br />';
74
+
75
+ }
76
+
77
+ ?>
78
+
79
+
80
+
81
+ <!DOCTYPE html>
82
+
83
+ <html>
84
+
85
+ <head>
86
+
87
+ <meta charset="UTF-8">
88
+
89
+ <link rel="stylesheet" href="css/common.css">
90
+
91
+ <title>在庫削除</title>
92
+
93
+ </head>
94
+
95
+ <body>
96
+
97
+
98
+
99
+ <?php
100
+
101
+
102
+
103
+ try
104
+
105
+ {
106
+
107
+
108
+
109
+ $stock_id=$_GET['stockid'];
110
+
111
+
112
+
113
+ $dsn='mysql:dbname=user;host=localhost;charset=utf8';
114
+
115
+ $user='yusei';
116
+
117
+ $password='rogin1111';
118
+
119
+ $dbh=new PDO($dsn,$user,$password);
120
+
121
+ $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
122
+
123
+
124
+
125
+ $sql='SELECT purchase_date,deadline,stock_name,price,number,gazou FROM stocks WHERE stock_id=?';
126
+
127
+ $stmt=$dbh->prepare($sql);
128
+
129
+ $data[]=$stock_id;
130
+
131
+ $stmt->execute($data);
132
+
133
+
134
+
135
+ $rec=$stmt->fetch(PDO::FETCH_ASSOC);
136
+
137
+ $stock_purchase_date=$rec['purchase_date'];
138
+
139
+ $stock_deadline=$rec['deadline'];
140
+
141
+ $stock_name=$rec['stock_name'];
142
+
143
+ $stock_price=$rec['price'];
144
+
145
+ $stock_number=$rec['number'];
146
+
147
+ $stock_gazou_name_old=$rec['gazou'];
148
+
149
+
150
+
151
+ $dbh=null;
152
+
153
+
154
+
155
+ if($stock_gazou_name_old=='')
156
+
157
+ {
158
+
159
+ $disp_gazou='';
160
+
161
+ }
162
+
163
+ else
164
+
165
+ {
166
+
167
+ $disp_gazou='<img src="./gazou/'.$stock_gazou_name_old.'">';
168
+
169
+ }
170
+
171
+
172
+
173
+ }
174
+
175
+ catch(Exception $e)
176
+
177
+ {
178
+
179
+ echo "エラー発生:" . htmlspecialchars($e->getMessage(),ENT_QUOTES, 'UTF-8') . "<br>";
180
+
181
+ print'ただいま障害により大変ご迷惑をお掛けしております。';
182
+
183
+ exit();
184
+
185
+ }
186
+
187
+
188
+
189
+ ?>
190
+
191
+
192
+
193
+ <h4>商品ID:<?php print $stock_id; ?></h4>
194
+
195
+ <?php print $disp_gazou; ?>
196
+
197
+ <br />
198
+
199
+ <form method="post" action="stock_edit_check.php" enctype="multipart/form-data">
200
+
201
+ <input type="hidden"name="stockid" value="<?php print $stock_id; ?>">
202
+
203
+ <input type="hidden" name="gazou_name_old" value="<?php print $stock_gazou_name_old; ?>"> // 既に登録されている画像を表示
204
+
205
+
206
+
207
+ <label for="purchase_date">購入日:  </label>
208
+
209
+ <input type="date" name="purchase_date" value="<?php print $stock_purchase_date ?>"><br>
210
+
211
+
212
+
213
+ <label for="deadline">消費期限:</label>
214
+
215
+ <input type="date" name="deadline" value="<?php print $stock_deadline ?>"><br>
216
+
217
+
218
+
219
+ <label for="stock_name">商品名: </label>
220
+
221
+ <input type="text" name="stock_name" style="width:200px" value="<?php print $stock_name; ?>"><br>
222
+
223
+
224
+
225
+ <label for="price">値段:  </label>
226
+
227
+ <input type="text" name="price" style="width:50px" value="<?php print $stock_price; ?>"><br>
228
+
229
+
230
+
231
+ <label for="number">在庫数:  </label>
232
+
233
+ <input type="number" name="number" value="<?php print $stock_number; ?>"><br>
234
+
235
+
236
+
237
+ <label for="gazou">画像:   </label>
238
+
239
+ <input type="file" name="gazou" style="width:400px"><br>
240
+
241
+ <input type="button" onclick="history.back()" value="戻る">
242
+
243
+ <input type="submit" value="修正">
244
+
245
+
246
+
247
+ </form>
248
+
249
+
250
+
251
+ </body>
252
+
253
+ </html>
254
+
255
+ ```
256
+
257
+
258
+
39
259
  「stock_edit_check.php:入力内容をチェックする。」
40
260
 
41
261
  ```php
@@ -594,7 +814,7 @@
594
814
 
595
815
 
596
816
 
597
- $sql='UPDATE stocks SET purchase_date=?,deadline=?,stock_name=?,price=?,number=?,gazou=? WHERE stock_id=?';
817
+ $sql='UPDATE stocks SET purchase_date=:purchase_date,deadline=:deadline,stock_name=:stock_name,price=:price,number=:number,gazou=:gazou_name WHERE stock_id=:stock_id';
598
818
 
599
819
  $stmt=$dbh->prepare($sql);
600
820
 
@@ -604,7 +824,7 @@
604
824
 
605
825
  {
606
826
 
607
- $data[]=$stock_purchase_date;
827
+ $data[':purchase_date']=$stock_purchase_date;
608
828
 
609
829
  }
610
830
 
@@ -614,7 +834,7 @@
614
834
 
615
835
  {
616
836
 
617
- $data[]=$stock_deadline;
837
+ $data[':deadline']=$stock_deadline;
618
838
 
619
839
  }
620
840
 
@@ -624,7 +844,7 @@
624
844
 
625
845
  {
626
846
 
627
- $data[]=$stock_name;
847
+ $data[':stock_name']=$stock_name;
628
848
 
629
849
  }
630
850
 
@@ -634,7 +854,7 @@
634
854
 
635
855
  {
636
856
 
637
- $data[]=(int)$stock_price;
857
+ $data[':price']=(int)$stock_price;
638
858
 
639
859
  }
640
860
 
@@ -644,7 +864,7 @@
644
864
 
645
865
  {
646
866
 
647
- $data[]=(int)$stock_number;
867
+ $data[':number']=(int)$stock_number;
648
868
 
649
869
  }
650
870
 
@@ -654,7 +874,7 @@
654
874
 
655
875
  {
656
876
 
657
- $data[]=$stock_gazou_name;
877
+ $data[':gazou_name']=$stock_gazou_name;
658
878
 
659
879
  }
660
880
 
@@ -664,9 +884,15 @@
664
884
 
665
885
  {
666
886
 
667
- $data[]=(int)$stock_id;
887
+ $data[':stock_id']=(int)$stock_id;
668
-
888
+
669
- }
889
+ }
890
+
891
+
892
+
893
+ var_dump($data);
894
+
895
+
670
896
 
671
897
 
672
898
 

1

推定エラー箇所の追記。

2020/11/15 07:10

投稿

yuuu752
yuuu752

スコア18

test CHANGED
File without changes
test CHANGED
@@ -8,14 +8,20 @@
8
8
 
9
9
  PHPで在庫管理アプリを作っています。
10
10
 
11
- 在庫情報の修正画面入力後、入力内容をチェックし、データベースに反映するところでエラーが発生しました。
12
-
13
11
  エラーについて調べたところ引数が異なるとのことでしたが、確認した限りでは引数の間違えは見当たりませんでした。
14
12
 
15
13
  他にどこか怪しい箇所があれば教えて頂きたいです。
16
14
 
17
15
 
18
16
 
17
+ [エラー箇所]
18
+
19
+ stock_edit_check.phpで入力内容チェック後、stock_edit_done.phpでDBに反映させる所でエラーが出ましたので、エラー箇所はstock_edit_done.phpのtry内と思われます。
20
+
21
+
22
+
23
+
24
+
19
25
  ### 発生している問題・エラーメッセージ
20
26
 
21
27