回答編集履歴
1
e
test
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
問題は大きく3点(細かい点は除く)
|
2
|
+
|
3
|
+
1. SQLとして正しい形ではない =>PHPから直に実行するのではなくDBに対して直に実行して想定の結果を得られるか先に確認すべき
|
4
|
+
2. プリペアドステートメントとして正しい形ではない=>PHPマニュアルで基本を理解すべき
|
5
|
+
3. エラーハンドリングされていない
|
6
|
+
|
7
|
+
|
1
8
|
```php
|
2
9
|
$diplay = "hogehoge";
|
3
10
|
$statement = sprintf("insert into users ('display_name') values (%s)",$diplay);
|
@@ -6,7 +13,7 @@
|
|
6
13
|
```
|
7
14
|
|
8
15
|
$statementって変数名にしてるけど、保持されてるのはinsertから始まる単なる文字列です。
|
9
|
-
値
|
16
|
+
値がシングルクォート(MySQLはダブルでも良いようだが)で囲われていないとSQLではエラーです。
|
10
17
|
更に、提示の書き方ではエスケープされないのでSQLインジェクション可能です。
|
11
18
|
また、カラムがシングルクォートで囲われてると「文字列」として扱われるので、それはそれでマズいのでは(全角カラム名とかならいけたかな?使うべきではないが)
|
12
19
|
|