Как правильно выполнить произвольный SQL запрос к базе

В любом месте PHP кода вы можете использовать встроенные в движок методы класса DB для работы с базой.

<?php
$res=DB::query("SELECT * FROM ".PREFIX."product WHERE price > 1000");

while($row=DB::fetchAssoc($res)){
  viewData($row);
}
?>

Важно не допускать SQL injection при вставке PHP переменных в SQL запрос.

Обязательно защищайте все составные части запроса от SQL инъекций с помощью готовых методов движка

  • DB::quote() - для строк;
  • DB::quoteInt() - для целочисленных переменных;
  • DB::quoteFloat() - для вещественных переменных;
  • DB::quoteIN() - для оператора IN, при перечислении сравниваемых значений;

 

Примеры использования

Если в запрос передается строковая переменная.

<?php
$sqlPart = $_GET['value'];
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE title LIKE '".$sqlPart."'"); // неправильно
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE title LIKE ".DB::quote($sqlPart)); // правильно
?>

Если в запрос передается Int переменная.

<?php
$id = '$_GET['value']; // int
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE id = '".$id); // неправильно
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE id= ".DB::quote($id)); // неправильно
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE id= ".DB::quoteInt($id)); // правильно

?>

Если в запрос передается float переменная.

<?php
$price = '$_GET['value']; // int
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE price = '".$price); // неправильно
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE price= ".DB::quote($price)); // неправильно
$res = DB::query("SELECT * FROM ".PREFIX."product WHERE price= ".DB::quoteFloat($price)); // правильно
?>

Если в запросе есть оператор IN.

$titleArr = array(      
      'Дверь межкомнаткая Тенго 22A',
      'Стол кухонный Bin04'
    );
$sql = "SELECT * FROM `".PREFIX."product` WHERE `title` IN (".DB::quoteIN($titleArr).")";