2013-12-21 86 views
-2

我使用PDO與URL查詢字符串顯示結果基於URL PDO

url: index.php?bType=doctor&loc=asia|india

CODE取出由數據庫結果:

$bind = array(); 
$str=explode('|',$_GET[loc]); 
    foreach ($str as $loc) 
{ 
    $bloc[] = $loc; 
} $loca = implode("','", $bloc); 
$btype=$_GET['bType']; 

$sqlsb = "SELECT * FROM t_business WHERE 1=1"; 
if(isset($_GET['bType'])){ $sqlsb .=" AND type like :btype"; $bind['btype']='%'. $btype .'%';} 

如果(isset($ _ GET [ 'loc'])){$ sqlsb。=「AND location IN(:loca)」; $綁定[ '軌跡'] = 「 '$軌跡'」;}

$qsb = $db->prepare($sqlsb); 
$qsb->execute($bind); 

上述代碼讀取沒什麼..

print_r($bind)顯示Array ([btype] => doctor [loca] => asia','india)

如果我做到這一點,而無需使用製備有用。

我正在編寫用於優化搜索過濾器的代碼。

感謝

UPDATE

AS CoursesWeb anwserd我沒有改變

if(isset($_GET['bType'])){ $sqlsb .=" AND type like :btype"; $bind['btype']='%'. $btype .'%';} 
if(isset($_GET['loc'])){ $sqlsb .=" AND location IN (:loca)"; $bind['loca']="'$loca'";} 

它爲:btype但與:loca

print_r($bind)展示array ([btype] => %doctor% [loca] => 'asia','india')

需要與loc做的更好的東西比使用implode..think所以

+1

無論數據來自URL,POST,Cookie,會話,文件,數據庫,電子郵件,變量等,它不改變PDO是如何工作的。啓用通知,你會看到'$ _GET [loc]'只是壞的。 'loc'指的是一個名爲'loc'的常量 - 當它找不到時,它將放棄並將其轉換爲一個字符串。 '$ _GET ['loc']'有什麼問題? – h2ooooooo

+0

是所有都donwvoting它..我認爲它也將有助於未來的人 – Gopal

回答

0

在LIKE語句中使用準備值時,「?」或「%」字符必須與值一起添加,而不是在sql語句中。

$btype = '%'. $btype .'%'; 
$sqlsb = "SELECT * FROM t_business WHERE type LIKE :btype"; 
+0

感謝作品爲'btype',但不是'LOC'..見更新回答 – Gopal

+0

也許本頁上的排水管可以幫助你:http:// stackoverflow.com/questions/1586587/pdo-binding-values-for-mysql-in-statement或者,在網上查找:「聲明中的pdo綁定」。 – CoursesWeb