回答編集履歴

3

用語訂正

2021/01/03 04:32

投稿

seastar3
seastar3

スコア2287

test CHANGED
@@ -54,4 +54,4 @@
54
54
 
55
55
 
56
56
 
57
- (tanatさんの御指摘の通り、単純なエスケープではSQL対策として不備があるので、PDOを尊重してプレースフォルダを用いたコードに改善しました。)
57
+ (tanatさんの御指摘の通り、単純なエスケープではSQL対策として不備があるので、PDOを尊重してプレースルダを用いたコードに改善しました。)

2

PDO接続を尊重しセキュリティー対策したコードに改良した。

2021/01/03 04:32

投稿

seastar3
seastar3

スコア2287

test CHANGED
@@ -32,26 +32,26 @@
32
32
 
33
33
  $siteiid = 1010;
34
34
 
35
+
36
+
35
- $sql = "SELECT * from chatlog where id = '".htmlspecialchars($siteiid)."'";
37
+ $sql = 'SELECT * FROM chatlog WHERE id = :id';
38
+
39
+ $stmt = $dbh->prepare($sql);
40
+
41
+ $stmt->bindValue(':id', $siteiid, PDO::PARAM_INT);
42
+
43
+ $stmt->execute();
44
+
45
+ while( $result = $sth->fetch(PDO::FETCH_ASSOC) ){
46
+
47
+ printf("%d|%d|%d\n", $result['id'], $result['name'], $result['log']);
48
+
49
+ }
36
50
 
37
51
  ```
38
52
 
39
53
  のようなSQLでの指定で取り出します。
40
54
 
41
- もし複数行ある場合には
42
55
 
43
- ```
44
56
 
45
- $rows = "";
46
-
47
- while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
57
+ tanatさんの御指摘の通り、単純なエスケープではSQL対策として不備があるので、PDOを尊重してプレースフォルダを用いたコードに改善しました。)
48
-
49
- $rows .= $result['id'].' '.$result['name'].' '.$result['log'].'<br>';
50
-
51
- }
52
-
53
- print($rows);
54
-
55
- ```
56
-
57
- のような形式で取り出します。

1

SQLインジェクション対策を補強

2021/01/02 16:41

投稿

seastar3
seastar3

スコア2287

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  $siteiid = 1010;
34
34
 
35
- $sql = "SELECT * from chatlog where id = '".$siteiid."'";
35
+ $sql = "SELECT * from chatlog where id = '".htmlspecialchars($siteiid)."'";
36
36
 
37
37
  ```
38
38