2016-10-07 2 views
0

SQL 주입을 방지하기에 충분한 연습을하고 싶습니다. 내가 몇 가지 예에서이 그동안 전 라인을 가지고 본 적이MySQLi 준비 문 우수 사례

$mysqli = new mysqli($host,$username,$password,$database); 
$query = $mysqli->prepare('SELECT * FROM users WHERE id = ? AND check = ?'); 
$query->bind_param('ii', $_GET['id'], $_POST['check']); 
$query->execute(); 

$result = $mysqli->query($query); 
while ($row = $result->fetch_assoc()) { 
... 
} 

: INTVAL

$result = $query->get_result(); 

그리고 (트림 사용하는 다른 사람을),() 등의 $ _GET/$ _ 안전을 위해 POST. SQL 인젝션을 피하는 가장 좋은 방법은 무엇입니까? 준비된 문장 연습이

+0

사이드 노트 :'_ _를 사용하여'$ _GET/$ _ POST '여야합니다. – Albzi

+1

[PHP에서 SQL 삽입을 방지하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – Naruto

답변

0

최고의 MySQLi는 분명히 PDO 문

당신이 위에 게시 된 코드 그냥 아무 의미를 준비했다. 작동 시키려면 실제로 get_result() 함수를 사용해야합니다. - is not guaranteed to be available :

$query = $mysqli->prepare('SELECT * FROM users WHERE id = ? AND check = ?'); 
$query->bind_param('ii', $_GET['id'], $_POST['check']); 
$query->execute(); 
$result = $query->get_result(); 
while ($row = $result->fetch_assoc()) { 
... 
} 

PDO와 함께 당신은 항상 트림 사용하는 다른 PDO의 멋진 기능

그리고 다른 사람은 말할 것도없고

$query = $pdo->prepare('SELECT * FROM users WHERE id = ? AND check = ?'); 
$query->execute([$_GET['id'], $_POST['check']]); 
while ($row = $query->fetch()) { 
... 
} 

작동하도록 보장 두 번 적은 코드를 필요로하면서(), intval() 등

이러한 th ings는 단지 SQL과 관련이 없기 때문에 다른 어떤 이유로 든 사용할 수 있습니다.