Как собрать запрос в PDO с элементов перед объединенные


, сомнения, заключается в следующем, в mysql мы можем объединять запрос, а затем выполнить поиск следующим образом:

$cidades = '&& (cidade = 100 || cidade = 101 || cidade = 102)';
$order = 'id ASC';

$sql = 'SELECT * FROM tabela WHERE status = 1 '.$cidades.' ORDER BY '.$order;

переменная $cidade может быть пустым или иметь n элементов для поиска, я не могу сделать так, я не знаю, также, если это будет таким образом:

$sql = $this->_db->prepare('SELECT * FROM tabela WHERE status = 1 :cidades ORDER BY :order');

$sql->execute(array(':cidades' => $cidades, ':order' => $order));
Author: CleristonDantas, 2015-10-13

2 answers

, Чтобы выполнить этот динамический запрос будет, нужны некоторые корректировки, во-первых, это превратить $cidades в массив и играть в clasula IN(), обмениваться execute() , bindValue() сделать order by работает, bind не может быть сделано с именем столбца, только оглавление.

$in = "";

$posicao = 2;
if(!empty($cidades)){
    $cidades = array(100, 101, 102);
    $totalInterrogacoes = count($cidades);
    $interrogacoes = str_repeat('?,', $totalInterrogacoes);
    $interrogacoes = substr($interrogacoes, 0, -1);
    $in = " AND cidades IN($interrogacoes) ";
}   

$sql = "SELECT * FROM tabela WHERE status = ? "
$stmt = $this->_db->prepare($sql);
$stmt->bindValue(1, 1);

if($in){
    $stmt->bindValue($posicao, implode($cidades));
    $sql .= $in ." ORDER BY ?";
    $posicao++;
}   

$stmt->bindValue($posicao, 1, PDO::PARAM_INT);

$stmt->execute();
 0
Author: rray, 2015-10-13 21:56:18

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

Например:

Имеем коды городов: 26,50 и 20.

$cidades =($arrayCidade != '' && count($arrayCidade) > 0) ? "AND (id='". implode("' OR id='", $arrayCidade) . "')" : '';

Использовать Только в PDO переменную $городов. Убедитесь, что получаете только цифры, вложенных в массив, чтобы не иметь SqlInjection.

 0
Author: Romario Pires, 2015-10-13 21:09:49