回答編集履歴

3

修正

2017/06/20 11:45

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -1,9 +1,7 @@
1
- mysqlをご利用ならPDOでプレースホルダとしてprepareで処理します
1
+ mysqlをご利用なプレースホルダとしてprepareで処理します
2
2
 
3
3
  どうしても気になるなら受け取ったパスをサニタイズする手もありますが
4
4
 
5
5
  処理的にはあまり意味がありません。
6
6
 
7
- なおprepareのエミュレーションはしないほうがいいとされています。
8
7
 
9
-

2

ソース削除

2017/06/20 11:45

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -7,45 +7,3 @@
7
7
  なおprepareのエミュレーションはしないほうがいいとされています。
8
8
 
9
9
 
10
-
11
- ```PHP
12
-
13
- $userStr=filter_input(INPUT_POST,'user');
14
-
15
- $passStr=filter_input(INPUT_POST,'pass');
16
-
17
-
18
-
19
- try{
20
-
21
- $dsn = 'mysql:host=localhost; dbname=test;charset=utf8;';
22
-
23
- $pdo = new PDO($dsn, $user,$password);
24
-
25
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
26
-
27
- $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
28
-
29
- $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
30
-
31
- $sql="SELECT * FROM tbl WHERE user=? AND password=? LIMIT 1";
32
-
33
- $stmt = $pdo->prepare($sql);
34
-
35
- $stmt->execute([$userStr,$passStr]);
36
-
37
- $row=$stmt->fetch();
38
-
39
- print_r($row);
40
-
41
- }catch(PDOException $e){
42
-
43
- die($e->getMessage());
44
-
45
- }
46
-
47
-
48
-
49
- ```
50
-
51
- mysqliにもprepare処理がありますが、やや煩雑なソースになります

1

調整

2017/06/20 11:45

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -10,7 +10,9 @@
10
10
 
11
11
  ```PHP
12
12
 
13
+ $userStr=filter_input(INPUT_POST,'user');
14
+
13
- $pass=filter_input(INPUT_POST,'pass');
15
+ $passStr=filter_input(INPUT_POST,'pass');
14
16
 
15
17
 
16
18
 
@@ -26,11 +28,11 @@
26
28
 
27
29
  $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
28
30
 
29
- $sql="SELECT * FROM tbl password=? limit 1";
31
+ $sql="SELECT * FROM tbl WHERE user=? AND password=? LIMIT 1";
30
32
 
31
33
  $stmt = $pdo->prepare($sql);
32
34
 
33
- $stmt->execute([$pass]);
35
+ $stmt->execute([$userStr,$passStr]);
34
36
 
35
37
  $row=$stmt->fetch();
36
38