2011-04-30 94 views
2

在MySQLi,PDO或PHP中是否存在使用參數化查詢但未準備稍後調用的API?我在ADO.NET中找到它時,我們不調用SQLParameter的.Prepare()方法,但我沒有在PHP中找到它。沒有在PHP中準備語句的參數化查詢

+0

你想要什麼或要求功能明智。 ?如果你不想準備一個聲明只是使用mysqli->查詢 – 2011-04-30 10:14:04

+0

我也不明白你的要求,爲什麼你不準備聲明並執行它? – markus 2011-04-30 10:35:16

+0

@molvi。準備好的語句是多次執行查詢的實用程序。認爲我想執行一次查詢。所以我不想爲數據庫準備不必要的開銷。如在內存中緩存查詢計劃 – ahoo 2011-04-30 10:35:19

回答

0

準備好的語句被髮送到數據庫服務器,其值與查詢分離。如果你想讓ID 1337的用戶使用PDO,你可以這樣做;

$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = :theUserIdToGet LIMIT 1'; 
$stmt = $db->prepare($sql); 
$stmt->bindValue(':theUserIdToGet', 1337); 
$result = $stmt->fetch(); 

在傳統的查詢中,這只是;

$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = ' . 1337 . ' LIMIT 1'; 
$stmt = $db->query($sql); 
$result = $stmt->fetch(); 

第一個例子顯然需要更多的代碼,但它有以下好處;

  • 安全性 - 值(僅在此例中爲1337)分別發送到數據庫服務器。數據庫服務器安全地檢查這些值是否有錯誤字符,並在執行前將它們插入到查詢中。請注意,一些查詢API將模擬此,但它仍然提供了很大的安全性。
  • 可讀性 - 向查詢中添加多個參數時,如果連接字符串(「WHERE id =」。$ var1。「AND」。$ var2。「= 1」等)會變得非常混亂。
  • 表現(偶爾) - 準備好的陳述在執行很多次時會快得多,但在實踐中這是非常罕見的。通過query()準備查詢的性能開銷可以忽略不計。

由於可讀性和安全性,在將變量插入查詢時應始終使用已準備好的語句。

PDO通常被認爲非常好,我個人一直都在使用它。它的學習曲線很溫和,許多教程都可以在網上找到。它的文檔是here

+1

請再讀一遍我的問題 – ahoo 2011-04-30 11:47:44