2016-10-07 3 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()) { 
... 
} 

Я видел, что в некоторых примерах эта строка перед время:

$result = $query->get_result(); 

и другие, которые используют облицовку(), intval() и т.д. в $ _GET/$ _ POST для безопасности. Какая практика и безопасный способ избежать инъекций sql?

+0

Замечание: оно должно быть '$ _GET/$ _ POST' с' _'. – Albzi

+1

Возможный дубликат [Как предотвратить SQL-инъекцию в PHP?] (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 вам нужно в два раза меньше кода, который всегда гарантированно работать

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

не говоря уже о других замечательных функций ПДО

и другие, которые используют облицовку(), intval() и т.д.

эти это просто не имеет значения для SQL, вы можете использовать их по какой-либо другой причине.

Смежные вопросы