2015-10-08 23 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查詢,其中被設定後,第一個if語句
  2. 我不能等到我準備SQL綁定參數從而$ SQL變量初始化$之前所以它必須被放置在$ sql正在準備之後

所以有一個if語句之前$sql = $dbh->prepare("Select * from table data Where tableId = 5 {$where}");和一個if語句之後。

而我的問題是:有沒有辦法刪除這個多餘的if語句,或者我只能這樣做。

回答

0

可以使用得心應手PDO的功能,讓你用的參數發送陣列直接進入執行()

$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