2015-06-20 2 views
1

У меня есть вопрос:Предотвращение SQL-инъекций по динамическим параметрам

У меня есть форма, которая отправляется через GET, и я хочу защитить базу данных.

Проблема в том, что существует 8 ящиков с аргументами, которые могут быть переданы в форме на страницу, но они не должны быть там.

В настоящее время я проверяю, отправляет ли поле выбора значение по умолчанию, если его нет, im хранит его в массиве. После этого цикла я корыта массива и добавления параметров поиска в строку:

$searchString = "WHERE Aktivno = 1"; 
foreach($pretragaArray as $key => $item){ 
    $searchString = $searchString." AND"; 
    $searchString = $searchString." ". $key ." = " . $item; 
} 

В конце концов я в конечном итоге с поиском строки запроса, как этот

WHERE Aktivno = 1 AND IDVrstaOglasa = 1 

или

WHERE Aktivno = 1 AND IDOpstina = 15 AND IDGrad = 11 AND IDVrstaOglasa = 1 AND Broj_soba = 3 AND IDKategorijaNekretnine = 5 

Я нахожусь используя класс PDO php для запроса базы данных.

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

ответ

1

Вы можете создать параметризованный запрос с динамическим числом параметров, как это:

$searchString = "WHERE Aktivno = 1"; 
$params = array(); 
$paramNum = 1; 

foreach($pretragaArray as $key => $item) 
{ 
    $paramName = ':param' . $paramNum++; 
    $searchString = $searchString." AND"; 
    $searchString = $searchString." ". $key ." = " . $paramName; 
    $params[$paramName] = $item; 
} 

$db = new PDO("..."); 
$statement = $db->prepare("SELECT * FROM some_table " . $searchString); 
$statement->execute($params); 
$row = $statement->fetch(); // or fetchAll()... 
+0

Спасибо вам, спасибо вашего ответа я был в состоянии изменить свой запрос и отображать результаты – iGoogle

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