2017-04-18 118 views
0

我需要使用PDO在PHP中構建SQL語句,並且WHERE子句中的值數是動態的。將WHERE參數動態添加到PDO sql語句

例如

SELECT column1, column2 FROM table WHERE category = :category OR category = :category 

在這種情況下,有2個類別的where子句中,我比較在,但它可能會超過200,所以我不能只用:類別1和:產品組別的名稱。

我嘗試以下,但它給人一種 「常規錯誤:2031」 信息

$where = array("category = :category", "category = :category"); 
    $params = array("abc", "xyz"); 
    $query = "SELECT column1, column2 FROM table WHERE ". implode(" OR ", $where); 
    $s= $h->prepare($query); 
    $s->setFetchMode(PDO::FETCH_ASSOC); 
    $s->execute(array_values($params)); 

有什麼建議?

回答

0

如果有很多種類,使用SQL IN聲明

你可以看看這裏的如何將其綁定到你的數組: Can I bind an array to an IN() condition?

+0

感謝您的快速回復。我會研究IN()條件。 – user1480951

+1

這應該作爲重複的標誌發佈,而不是作爲答案。 – Shadow

+0

@Shadow如果OP不知道「IN」語句,他不能搜索如何將參數綁定到它。 – blue112

-1

見上述評論關於語句,但在情況下,如果你還打算使用動態生成的其中一部分,你要麼使用問號或每個PDO僞變量創建的唯一名稱(?):

$where = array("category = ?", "category = ?"); 
$params = array("abc", "xyz"); 
$query = "SELECT column1, column2 FROM table WHERE ". implode(" OR ", $where); 
$s= $h->prepare($query); 
$s->setFetchMode(PDO::FETCH_ASSOC); 
$s->execute($params); 

這裏閱讀更多德尾巴:http://php.net/manual/en/pdo.prepare.php

+0

您的陳述部分正確,但您應該更多關注您發佈的代碼 –