2016-09-29 30 views
1

我對PDO有以下疑問:每次在PDO準備後,綁定參數是否必要?

如果我要執行多個查詢,每次我打電話準備時都需要使用bindParam方法?

例子:

$connection->prepare("SELECT * FROM table WHERE y = :y"); 
$connection->bindParam(":y", $y); 

$connection->prepare("SELECT * FROM table2 WHERE y = :w"); 
$connection->bindParam(":w", $w); 

或我可以做更好的使用是這樣的:

$connection->bindParam(":y", $y); 
$connection->bindParam(":w", $w); 

$connection->prepare("SELECT * FROM table WHERE y = :y"); 
$connection->prepare("SELECT * FROM table2 WHERE y = :w"); 

OR:

$connection->prepare("SELECT * FROM table WHERE y = :y"); 
$connection->prepare("SELECT * FROM table2 WHERE y = :w"); 

$connection->bindParam(":y", $y); 
$connection->bindParam(":w", $w); 

¿至極秩序,什麼是可能的?

+0

你不會在單次執行時執行多重查詢。您需要每個查詢,綁定參數併爲每個查詢單獨執行 – JYoThI

+0

這些都不起作用。 「準備」的回報是一個準備好的陳述。 'bindParam'是一個與* statement *關聯的方法,而不是* connection *。綁定到佔位符的變量的值在調用語句「execute」時計算。我建議您查看示例的PDO文檔。 – spencer7593

+0

如果您需要使用相同參數執行多個查詢,則意味着您的數據庫設計很可能是錯誤的。爲所有類似的數據創建一張表,因此只需要一個查詢就可以運行。 –

回答

3

當你bind params您綁定他們準備好的聲明中沒有連接,所以實際上是行不通的

$connection->bindParam(":w", $w); 

相反,你需要做的:自動

$stmt = $connection->prepare("SELECT * FROM table2 WHERE y = :w"); 
$stmt->bindParam(":w", $w); 

哪意味着您需要爲每個語句單獨綁定參數。