2015-10-08 3 views
0

Я преобразование всех мои запросов от MySQL к PDO, и в этом процессе я нашел условный запрос подобно следующегоУсловный запрос с PDO подготовить и связать заявление

if (isset($parameters['searchTerm'])) { 
    $where =" And title LIKE '%{$parameters['searchTerm'] }%'"; 
} 

$sql = "Select * from table data Where tableId = 5 {$where} "; 

и когда я пытаюсь преобразовать этот запрос в PDO ожидаемый синтаксис выглядит следующим образом

if (isset($parameters['searchTerm'])) { 
    $where =" And title LIKE :searchTerm"; 
} 



$sql = $dbh->prepare("Select * from table data Where tableId = 5 {$where}"); 



if (isset($parameters['searchTerm'])) { 
    $sql ->bindParam(':searchTerm', '%{$parameters['searchTerm'] }%'); 
} 

$sql ->execute(); 

Теперь, как вы можете видеть, что если условие if (isset ($parameters ['searchTerm'])) {...} повторяется дважды.

Причина в том,

  1. Я не могу подготовить запрос SQL, прежде чем $, где в настоящее время установлены таким образом, SQL переменных $ инициализируются после первого, если оператор
  2. я не могу связать параметры, пока я не подготовить SQL поэтому он должен быть размещен после подготовки $ sql.

Таким образом, существует один оператор if до $sql = $dbh->prepare("Select * from table data Where tableId = 5 {$where}"); и один оператор if после.

И мой вопрос: Есть ли способ удалить это избыточное утверждение if, или я должен сделать это только так.

ответ

0

вы можете использовать функцию HANDY ПДО, который позволяет посылать массив с параметрами прямо в Execute()

$where = ''; 
$params = array(); 
if (isset($parameters['searchTerm'])) { 
    $where =" And title LIKE :searchTerm"; 
    $params['searchTerm'] = "%$parameters[searchTerm]%"; 
} 
$sql = "Select * from table data Where tableId = 5 $where"; 
$pdo->prepare($sql)->execute($params); 

Заметьте, что PHP синтаксис в коде тоже неправильно.

+0

в отношении синтаксиса php Я, должно быть, испортил что-то во время редактирования запросов, поэтому не беспокойтесь об этом. – Arpita