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

回答編集履歴

5

見直し

2018/04/16 10:18

投稿

退会済みユーザー
answer CHANGED
@@ -3,27 +3,30 @@
3
3
  [PHP: PDOStatement::bindValue - Manual](http://php.net/manual/ja/pdostatement.bindvalue.php)
4
4
  ```php
5
5
  try{
6
- $d = new PDO("mysql:host=localhost;dbname=db;charset=utf8mb4","root","1234",[
6
+ $d = new PDO("mysql:host=localhost;dbname=db;charset=utf8mb4","root","1234",[
7
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
7
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
8
- PDO::ATTR_EMULATE_PREPARES => false,
8
+ PDO::ATTR_EMULATE_PREPARES => false,
9
- ]);
9
+ ]);
10
10
  print "接続成功<br>";
11
+ $d->beginTransaction(); // トランザクション開始
12
+
13
+ $s = $d->prepare("INSERT INTO form1 (`namae`,`nen`,`sex`,`jusyo`,`tel`,`mail`,`index`,`toi`) values (:namae,:nen,:sex,:jusyo,:tel,:mail,:index,:toi)"); // SQLインジェクション対策にはprepare
14
+ $s->bindValue(':namae', $namae, PDO::PARAM_STR);
15
+ $s->bindValue(':nen', $nen, PDO::PARAM_STR);
16
+ $s->bindValue(':sex', $sex, PDO::PARAM_STR);
17
+ $s->bindValue(':jusyo', $jusyo, PDO::PARAM_STR);
18
+ $s->bindValue(':tel', $tel, PDO::PARAM_STR);
19
+ $s->bindValue(':mail', $mail, PDO::PARAM_STR);
20
+ $s->bindValue(':index', $index, PDO::PARAM_STR);
21
+ $s->bindValue(':toi', $toi, PDO::PARAM_STR);
22
+ $s->execute();
23
+
24
+ $d->commit(); // コミットも忘れずに
25
+
11
26
  } catch (PDOException $e) {
12
27
  exit('データベース接続失敗。'.$e->getMessage());
13
28
  }
14
29
 
15
- $s = $d->prepare("INSERT INTO form1 (`namae`,`nen`,`sex`,`jusyo`,`tel`,`mail`,`index`,`toi`) values (:namae,:nen,:sex,:jusyo,:tel,:mail,:index,:toi)"); // SQLインジェクション対策にはprepare
16
- $s->bindValue(':namae', $namae, PDO::PARAM_STR);
17
- $s->bindValue(':nen', $nen, PDO::PARAM_STR);
18
- $s->bindValue(':sex', $sex, PDO::PARAM_STR);
19
- $s->bindValue(':jusyo', $jusyo, PDO::PARAM_STR);
20
- $s->bindValue(':tel', $tel, PDO::PARAM_STR);
21
- $s->bindValue(':mail', $mail, PDO::PARAM_STR);
22
- $s->bindValue(':index', $index, PDO::PARAM_STR);
23
- $s->bindValue(':toi', $toi, PDO::PARAM_STR);
24
- $s->execute();
25
-
26
- $d->commit(); // コミットも忘れずに
27
30
  ```
28
31
 
29
32
  みたいな書き方になるかと。

4

加筆修正

2018/04/16 10:18

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,5 @@
1
+ prepare()→bindValue()→execute()の繰り返しをして、
2
+ 最後にcommit()しよう。
1
3
  [PHP: PDOStatement::bindValue - Manual](http://php.net/manual/ja/pdostatement.bindvalue.php)
2
4
  ```php
3
5
  try{

3

加筆修正

2018/04/16 10:13

投稿

退会済みユーザー
answer CHANGED
@@ -1,7 +1,10 @@
1
1
  [PHP: PDOStatement::bindValue - Manual](http://php.net/manual/ja/pdostatement.bindvalue.php)
2
2
  ```php
3
3
  try{
4
- $d = new PDO("mysql:host=localhost;dbname=db","root","1234");
4
+ $d = new PDO("mysql:host=localhost;dbname=db;charset=utf8mb4","root","1234",[
5
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
6
+ PDO::ATTR_EMULATE_PREPARES => false,
7
+ ]);
5
8
  print "接続成功<br>";
6
9
  } catch (PDOException $e) {
7
10
  exit('データベース接続失敗。'.$e->getMessage());
@@ -22,5 +25,6 @@
22
25
  ```
23
26
 
24
27
  みたいな書き方になるかと。
28
+ 接続時に例外をスローするようにしたのと、utf8接続指定したのと。
25
29
  カラム名をバッククォートで囲むと、予約語とかぶっても安心。
26
30
  もしも数値型のカラムの場合は、PDO::PARAM_STRじゃなくPDO::PARAM_INTを使います。

2

加筆修正

2018/04/16 10:09

投稿

退会済みユーザー
answer CHANGED
@@ -7,7 +7,7 @@
7
7
  exit('データベース接続失敗。'.$e->getMessage());
8
8
  }
9
9
 
10
- $s = $d->prepare("INSERT INTO form1 (`namae`,`nen`,`sex`,`jusyo`,`tel`,`mail`,`index`,`toi`) values (:namae,:nen,:sex,:jusyo,:tel,:mail,:index,:toi)");
10
+ $s = $d->prepare("INSERT INTO form1 (`namae`,`nen`,`sex`,`jusyo`,`tel`,`mail`,`index`,`toi`) values (:namae,:nen,:sex,:jusyo,:tel,:mail,:index,:toi)"); // SQLインジェクション対策にはprepare
11
11
  $s->bindValue(':namae', $namae, PDO::PARAM_STR);
12
12
  $s->bindValue(':nen', $nen, PDO::PARAM_STR);
13
13
  $s->bindValue(':sex', $sex, PDO::PARAM_STR);
@@ -17,6 +17,8 @@
17
17
  $s->bindValue(':index', $index, PDO::PARAM_STR);
18
18
  $s->bindValue(':toi', $toi, PDO::PARAM_STR);
19
19
  $s->execute();
20
+
21
+ $d->commit(); // コミットも忘れずに
20
22
  ```
21
23
 
22
24
  みたいな書き方になるかと。

1

加筆修正

2018/04/16 10:04

投稿

退会済みユーザー
answer CHANGED
@@ -7,7 +7,7 @@
7
7
  exit('データベース接続失敗。'.$e->getMessage());
8
8
  }
9
9
 
10
- $s = $d->prepare("INSERT INTO form1 (namae,nen,sex,jusyo,tel,mail,index,toi) values (:namae,:nen,:sex,:jusyo,:tel,:mail,:index,:toi)");
10
+ $s = $d->prepare("INSERT INTO form1 (`namae`,`nen`,`sex`,`jusyo`,`tel`,`mail`,`index`,`toi`) values (:namae,:nen,:sex,:jusyo,:tel,:mail,:index,:toi)");
11
11
  $s->bindValue(':namae', $namae, PDO::PARAM_STR);
12
12
  $s->bindValue(':nen', $nen, PDO::PARAM_STR);
13
13
  $s->bindValue(':sex', $sex, PDO::PARAM_STR);
@@ -20,4 +20,5 @@
20
20
  ```
21
21
 
22
22
  みたいな書き方になるかと。
23
+ カラム名をバッククォートで囲むと、予約語とかぶっても安心。
23
24
  もしも数値型のカラムの場合は、PDO::PARAM_STRじゃなくPDO::PARAM_INTを使います。