下記のコードではエラーは出ていない
出てきていないのではなく、出すように設定されていないからです。
php
1<?php
2//開発時は必須です
3ini_set('display_errors', 1);
4error_reporting(E_ALL);
指摘すべき部分が複数あるので、後ほど追記します。
php
1<?php
2
3//開発時エラーメッセージを表示
4ini_set('display_errors', 1);
5error_reporting(E_ALL);
6
7try {
8 $pdo = new PDO('mysql:host=localhost;dbname=form_test;charset=utf8', 'form_test', 'h5nf648x');
9
10 //プロペアドステートメントを利用してSQLインジェクションの脆弱性を潰す
11 $sql = "INSERT INTO `form`(";
12 $sql .= "`id`";
13 $sql .= ", `company_name`";
14 $sql .= ", `company_unit`";
15 $sql .= ", `name`";
16 $sql .= ", `name_furigana`";
17 $sql .= ", `mail_address`";
18 $sql .= ", `tel1`";
19 $sql .= ", `tel2`";
20 $sql .= ", `tel3`";
21 $sql .= ", `fax1`";
22 $sql .= ", `fax2`";
23 $sql .= ", `fax3`";
24 $sql .= ", `postal_code1`";
25 $sql .= ", `postal_code2`";
26 $sql .= ", `zip`";
27 $sql .= ", `address`";
28 $sql .= ", `contact_us`";
29 $sql .= ") VALUES (";
30 $sql .= "NULL";
31 $sql .= ", :company_name";
32 $sql .= ", :company_unit";
33 $sql .= ", :name";
34 $sql .= ", :name_furigana";
35 $sql .= ", :mail_address";
36 $sql .= ", :tel1";
37 $sql .= ", :tel2";
38 $sql .= ", :tel3";
39 $sql .= ", :fax1";
40 $sql .= ", :fax2";
41 $sql .= ", :fax3";
42 $sql .= ", :postal_code1";
43 $sql .= ", :postal_code2";
44 $sql .= ", :zip";
45 $sql .= ", :address";
46 $sql .= ", :contact_us";
47 $sql .= ")";
48 $stmt = $pdo->prepare($sql);
49
50 // ここから以下は、適切なバリデーション処理が事前にされていることが前提
51 //
52 // 質問にあるような
53 // $_SESSION[company_name]
54 // という書き方はNG
55 //
56 // ※ company_name が定数でない限りにおいて
57 //
58 // $_SESSION['company_name']
59 // と書く
60 //
61 // $_SESSION 変数から SQL に渡される例は通常ないはずだが、
62 // 一応何か特殊な状況があるのであろうという意味で、こkでは指摘の対象外。
63 //
64 // プロペアドステートメント で ?, ?, ? .... のように使う方法もあるが、
65 // 対応がわかりやすく、無用なミスを事前に防ぐ意味で、
66 // :column_name を使用
67 //
68 // 触れていない情報もあるので、詳細は公式リファレンスを読んでください。
69 //
70 $arr = [];
71 $arr[':company_name'] = $_SESSION['company_name'];
72 $arr[':company_unit'] = $_SESSION['company_unit'];
73 $arr[':name'] = $_SESSION['name'];
74 $arr[':name_furigana'] = $_SESSION['name_furigana'];
75 $arr[':mail_address'] = $_SESSION['mail_address'];
76 $arr[':tel1'] = $_SESSION['tel1'];
77 $arr[':tel2'] = $_SESSION['tel2'];
78 $arr[':tel3'] = $_SESSION['tel3'];
79 $arr[':fax1'] = $_SESSION['fax1'];
80 $arr[':fax2'] = $_SESSION['fax2'];
81 $arr[':fax3'] = $_SESSION['fax3'];
82 $arr[':postal_code1'] = $_SESSION['postal_code1'];
83 $arr[':postal_code2'] = $_SESSION['postal_code2'];
84 $arr[':zip'] = $_SESSION['zip'];
85 $arr[':address'] = $_SESSION['address'];
86 $arr[':contact_us'] = $_SESSION['contact_us'];
87
88 $stmt->execute($arr);
89 //$intLastInsertId = $pdo->lastInsertId();
90} catch (\PDOException $e) {
91 var_dump($e);
92}
どこで改行するかなども、意図があってやっていることなので、なぜこういう書き方しているのだろうかなど考えて見てはいかがでしょうか?
好みはありますので、この辺は人によって違いは大きい部分でしょうけど…
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/04 01:14