2013-05-15 106 views
1

我使用下面的查詢:我可以使用預處理語句啓用/禁用查詢的某些部分嗎?

SELECT foo, bar FROM mytable WHERE foo=:foo AND userid=:userid; 

我想鬆AND userid=:userid一部分「管理員」類用戶(他們能看到foo一切都用戶)。

有沒有辦法做到這一點使用PDO準備的語句?還是我使用字符串連接來創建兩個不同的查詢?我正在考慮使用某種LIKE結構,但它感覺有點團塊。

+3

簡短回答:否 – zerkms

+0

@zerkms:謝謝。我現在使用'sprintf'來構建它們。 –

回答

0

不,你不能這樣做。

雖然您可以有兩個準備好的語句並使用邏輯來選擇它們。

$queryWithUser = $pdo -> prepare ('SELECT foo, bar FROM mytable WHERE foo=:foo AND userid=:userid;'); 
$queryWithoutUser = $pdo -> prepare ('SELECT foo, bar FROM mytable WHERE foo=:foo;'); 

$result = $doQueryWithUser? 
    $queryWithUser -> execute (array ('foo' => 123, 'userid' => 456)): 
    $queryWithoutUser -> execute (array ('userid' => 456)); 

或者您可以根據需要在特定時間生成所需的準備好的語句。

$queryString = 'SELECT foo, bar FROM mytable WHERE foo=:foo'; 
if ($doQueryWithUser) { 
    $queryString .= ' AND userid=:userid'; 
} 
$query = $pdo -> prepare ($queryString . ';'); 
相關問題