質問編集履歴

2

2022/01/17 16:52

投稿

xo_yo
xo_yo

スコア54

test CHANGED
@@ -1 +1 @@
1
- 気づけばプロ並みPHP SQLSTATE[42000]: Syntax error or access violation: 1044について
1
+ 気づけばプロ並みPHP
test CHANGED
@@ -1,375 +1,188 @@
1
1
  ```php
2
-
3
2
  <?php
4
-
5
3
  session_start();
6
-
7
4
  session_regenerate_id(true);
8
-
9
5
  ?>
10
-
11
6
  <!DOCTYPE html>
12
-
13
7
  <html lang="en">
14
-
15
8
  <head>
16
-
17
9
  <meta charset="UTF-8">
18
-
19
10
  <title>Document</title>
20
-
21
11
  </head>
22
-
23
12
  <body>
24
-
25
13
  <?php
26
-
27
14
  require_once('../common/common.php');
28
-
29
15
  $post=sanitize($_POST);
30
-
31
16
  try{
32
-
33
17
  $onamae=$post['onamae'];
34
-
35
18
  $email=$post['email'];
36
-
37
19
  $postal1=$post['postal1'];
38
-
39
20
  $postal2=$post['postal2'];
40
-
41
21
  $address=$post['address'];
42
-
43
22
  $tel=$post['tel'];
44
23
 
45
-
46
-
47
24
  echo $onamae.'様<br/>';
48
-
49
25
  echo'ご注文ありがとうございました。<br/>';
50
-
51
26
  echo$email.' にメールを送りましたのでご確認ください。<br/>';
52
-
53
27
  echo'商品は以下の住所に発送させていただきます。<br/>';
54
-
55
28
  echo $postal1.'-'.$postal2.'<br/>';
56
-
57
29
  echo $address.'<br/>';
58
-
59
30
  echo $tel.'<br/>';
60
31
 
61
-
62
-
63
32
  $honbun='';
64
-
65
33
  $honbun.=$onamae."様\n\nこの度はご注文ありがとうございました。\n";
66
-
67
34
  $honbun.="\n";
68
-
69
35
  $honbun.="ご注文内容\n";
70
-
71
36
  $honbun.="----------\n";
72
37
 
73
-
74
-
75
38
  $cart=$_SESSION['cart'];
76
-
77
39
  $kazu=$_SESSION['kazu'];
78
-
79
40
  $max=count($kazu);
80
41
 
81
-
82
-
83
42
  $dsn='mysql:dbname=shop;host=localhost;charset=utf8';
84
-
85
43
  $user='root';
86
-
87
44
  $password='';
88
45
 
89
-
90
-
91
46
  $dbh=new PDO($dsn,$user,$password);
92
-
93
47
  $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
94
-
95
-
96
48
 
97
49
  for($i=0;$i<$max;$i++){
98
50
 
51
+ $sql='SELECT name,price FROM mst_product WHERE code=?';
52
+ $stmt=$dbh->prepare($sql);
53
+ $data=[];
54
+ $data[]=$cart[$i];
55
+ $stmt->execute($data);
99
56
 
57
+ $rec=$stmt->fetch(PDO::FETCH_ASSOC);
100
58
 
59
+ $name=$rec['name'];
101
- $sql='SELECT name,price FROM mst_product WHERE code=?';
60
+ $price=$rec['price'];
61
+ $kakaku[]=$price;
62
+ $suryo=$kazu[$i];
63
+ $shokei=$price*$suryo;
102
64
 
65
+ $honbun.=$name.'';
66
+ $honbun.=$price.'円×';
67
+ $honbun.=$suryo.'個=';
68
+ $honbun.=$shokei."円\n";
69
+ }
70
+
71
+ $sql='LOCK TABLES dat_sales WRITE,dat_sales_product WRITE';
103
72
  $stmt=$dbh->prepare($sql);
73
+ $stmt->execute();
104
74
 
75
+ $sql='INSERT INTO dat_sales(code_member,name,email,postal1,postal2,address,tel) VALUES(?,?,?,?,?,?,?)';
76
+ $stmt=$dbh->prepare($sql);
77
+ $data=array();
105
- $data=[];
78
+ $data[]=0;
106
-
79
+ $data[]=$onamae;
80
+ $data[]=$email;
107
- $data[]=$cart[$i];
81
+ $data[]=$postal1;
108
-
82
+ $data[]=$postal2;
83
+ $data[]=$address;
84
+ $data[]=$tel;
109
85
  $stmt->execute($data);
110
86
 
111
87
 
88
+ $sql='SELECT LAST_INSERT_ID()';
89
+ $stmt=$dbh->prepare($sql);
90
+ $stmt->execute();
91
+ $rec=$stmt->fetch(PDO::FETCH_ASSOC);
92
+ $lastcode=$rec['LAST_INSERT_ID()'];
112
93
 
113
- $rec=$stmt->fetch(PDO::FETCH_ASSOC);
94
+ for($i=0;$i<$max;$i++){
114
-
95
+ $sql='INSERT INTO dat_sales_product(code_sales,code_product,price,quantity) VALUES(?,?,?,?)';
115
-
116
-
117
- $name=$rec['name'];
96
+ $stmt=$dbh->prepare($sql);
118
-
119
- $price=$rec['price'];
97
+ $data=array();
120
-
121
- $kakaku[]=$price;
98
+ $data[]=$lastcode;
122
-
99
+ $data[]=$cart[$i];
100
+ $data[]=$kakaku[$i];
123
- $suryo=$kazu[$i];
101
+ $data[]=$kazu[$i];
124
-
125
- $shokei=$price*$suryo;
102
+ $stmt->execute($data);
126
-
127
-
128
-
129
- $honbun.=$name.'';
130
-
131
- $honbun.=$price.'円×';
132
-
133
- $honbun.=$suryo.'個=';
134
-
135
- $honbun.=$shokei."円\n";
136
103
 
137
104
  }
138
105
 
139
-
140
-
141
- $sql='LOCK TABLES dat_sales WRITE,dat_sales_product WRITE';
106
+ $sql='UNLOCK TABLES';
142
-
143
107
  $stmt=$dbh->prepare($sql);
144
-
145
108
  $stmt->execute();
146
-
147
-
148
-
149
- $sql='INSERT INTO dat_sales(code_member,name,email,postal1,postal2,address,tel) VALUES(?,?,?,?,?,?,?)';
150
-
151
- $stmt=$dbh->prepare($sql);
152
-
153
- $data=array();
154
-
155
- $data[]=0;
156
-
157
- $data[]=$onamae;
158
-
159
- $data[]=$email;
160
-
161
- $data[]=$postal1;
162
-
163
- $data[]=$postal2;
164
-
165
- $data[]=$address;
166
-
167
- $data[]=$tel;
168
-
169
- $stmt->execute($data);
170
-
171
-
172
-
173
-
174
-
175
- $sql='SELECT LAST_INSERT_ID()';
176
-
177
- $stmt=$dbh->prepare($sql);
178
-
179
- $stmt->execute();
180
-
181
- $rec=$stmt->fetch(PDO::FETCH_ASSOC);
182
-
183
- $lastcode=$rec['LAST_INSERT_ID()'];
184
-
185
-
186
-
187
- for($i=0;$i<$max;$i++){
188
-
189
- $sql='INSERT INTO dat_sales_product(code_sales,code_product,price,quantity) VALUES(?,?,?,?)';
190
-
191
- $stmt=$dbh->prepare($sql);
192
-
193
- $data=array();
194
-
195
- $data[]=$lastcode;
196
-
197
- $data[]=$cart[$i];
198
-
199
- $data[]=$kakaku[$i];
200
-
201
- $data[]=$kazu[$i];
202
-
203
- $stmt->execute($data);
204
-
205
-
206
-
207
- }
208
-
209
-
210
-
211
- $sql='UNLOCK TABLES';
212
-
213
- $stmt=$dbh->prepare($sql);
214
-
215
- $stmt->execute();
216
-
217
-
218
109
 
219
110
  $dbh=null;
220
111
 
221
-
222
-
223
112
  $honbun.="送料は無料です。\n";
224
-
225
113
  $honbun.="-------------";
226
-
227
114
  $honbun.="\n";
228
-
229
115
  $honbun.="代金は以下の口座にお振り込みください\n";
230
-
231
- $honbun.="楽天銀行 タスク支店 00000\n";
116
+ $honbun.="銀行 00000\n";
232
-
233
117
  $honbun.="入金確認が取れ次第、発送させていただきます。\n";
234
-
235
118
  $honbun.="〜安心野菜ろくまる園〜\n";
236
-
237
119
  $honbun.="\n";
238
-
239
- $honbun.="東京都秋葉原123-4\n";
120
+ $honbun.="東京都123-4\n";
240
-
241
- $honbun.="電話:080-4444-3333\n";
121
+ $honbun.="電話:000-4444-3333\n";
242
-
243
122
  $honbun.="メール:info@inini.com\n";
244
123
 
245
-
246
-
247
124
  //echo'<br/>';
248
-
249
125
  //echo nl2br($honbun);
250
126
 
251
127
 
252
-
253
-
254
-
255
128
  //↓メールを送信するシステム  p248 お客側のメール
256
-
257
129
  $title='ご注文ありがとうございます';
258
-
259
130
  $header='From:info@inini.com';//送信元
260
-
261
131
  $honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
262
-
263
132
  mb_language('japanese');
264
-
265
133
  mb_internal_encoding('UTF-8');//mb_language('japanese');mb_internal_encodingこの形のまま覚える
266
-
267
134
  mb_send_mail($email,$title,$honbun,$header); //mb_send_mail(宛先, 件名, メッセージ, ヘッダ):https://techplay.jp/column/550
268
135
 
269
136
 
270
137
 
271
-
272
-
273
-
274
-
275
138
  //↓メールを送信するシステム  p248 お店側のメール $headerに注目
276
-
277
139
  $title='お客様からご注文がありました。';
278
-
279
140
  $header='From:'.$email;
280
-
281
141
  $honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
282
-
283
142
  mb_language('japanese');
284
-
285
143
  mb_internal_encoding('UTF-8');//mb_language('japanese');mb_internal_encodingこの形のまま覚える
286
-
287
144
  mb_send_mail('info@inini.com',$title,$honbun,$header); //mb_send_mail(宛先, 件名, メッセージ, ヘッダ):https://techplay.jp/column/550
288
145
 
289
-
290
-
291
146
  }catch(PDOException $e){
292
-
293
147
  exit($e->getMessage());
294
-
295
-
296
148
 
297
149
  }
298
150
 
299
-
300
-
301
151
  ?>
302
-
303
152
 
304
-
305
153
  </body>
306
-
307
154
  </html>
308
-
309
155
  ```
310
-
311
-
312
156
 
313
157
  「SQLSTATE[42000]: Syntax error or access violation: 1044」というエラーについて質問です。
314
158
 
315
-
316
-
317
159
  ```sql
318
-
319
160
  $sql='LOCK TABLES dat_sales WRITE,dat_sales_product WRITE';
320
-
321
161
  $stmt=$dbh->prepare($sql);
322
-
323
162
  $stmt->execute();
324
-
325
-
326
163
 
327
164
  _____________
328
165
 
329
-
330
-
331
166
  $sql='UNLOCK TABLES';
332
-
333
167
  $stmt=$dbh->prepare($sql);
334
-
335
168
  $stmt->execute();
336
-
337
169
  ```
338
-
339
170
  上記のコードを」書く前は正常にデータがDBに入っていたのですが、上記のコードを書いてから実行しようとすると「SQLSTATE[42000]: Syntax error or access violation: 1044」このようなエラーが出ます。
340
-
341
-
342
171
 
343
172
  エラーの内容は、「権限を持っていない」ということだとわかりましたが、なぜ上記のコードを書く前は正常に機能したのに、上記のコードを書いた途端にエラーが出るのでしょうか?
344
173
 
345
-
346
-
347
174
  また、いろいろ試しましたが効果がありませんでした。解決のヒントをご教授願います。
348
175
 
349
-
350
-
351
176
  ________________________________________________
352
-
353
177
  試したこと
354
-
355
178
  https://qiita.com/mako0104/items/63784abab061e587d6c5
356
-
357
179
  こちらの記事を参考にしてみましたが、うまくいきませんでした。
358
180
 
359
-
360
-
361
181
  上記の記事を参考にしたところ「zsh: no matches found:」ここのようになり、「https://qiita.com/nisaji/items/f9eede2164a74bc08db7」この記事を参考にしましたが、うまくいきませんでした。
362
-
363
-
364
182
 
365
183
  他にも同じような質問あり、真似てみたのですが、解決できませんでした。皆様のお力を借りられたら幸いです。ご教授の方をよろしくお願いいたします。
366
184
 
367
185
 
368
186
 
369
187
 
370
-
371
-
372
-
373
-
374
-
375
188
  

1

タイトルをわかりやすくするために変更しました

2022/01/05 21:24

投稿

xo_yo
xo_yo

スコア54

test CHANGED
@@ -1 +1 @@
1
- 気づけばプロ並みPHP
1
+ 気づけばプロ並みPHP SQLSTATE[42000]: Syntax error or access violation: 1044について
test CHANGED
File without changes