在MySQLi,PDO或PHP中是否存在使用參數化查詢但未準備稍後調用的API?我在ADO.NET中找到它時,我們不調用SQLParameter的.Prepare()方法,但我沒有在PHP中找到它。沒有在PHP中準備語句的參數化查詢
2
A
回答
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
相關問題
- 1. 如何在opencart中使用參數化查詢/準備語句?
- 2. SQL準備語句中的參數化查詢
- 3. 沒有準備好的語句或參數化查詢的SQL注入
- 4. PHP準備的語句沒有準備第二條語句
- 5. 優化準備語句查詢
- 6. PHP PDO準備語句 - MySQL LIKE查詢
- 7. 準備好的語句參數沒有在DataNucleus中設置
- 8. PHP在準備好的語句中準備了語句
- 9. 查詢與Android中的準備語句?
- 10. PDO準備語句參數
- 11. 沒有提供準備好的語句中的參數的數據MySQLi PHP
- 12. 在參數中準備語句?
- 13. PHP檢查在if語句中準備好的語句
- 14. 準備語句查詢語法錯誤
- 15. Java爲oracle alter session查詢準備的語句參數
- 16. PHP準備語句
- 17. 沒有準備好的語句查詢結果
- 18. 在PHP MVC準備語句
- 19. 如何在準備好的語句中有兩個sql查詢?
- 20. mysql準備了語句參數和訂購查詢
- 21. 春季地圖可選查詢參數到SQL準備語句
- 22. 如何在php中準備語句中綁定參數?
- 23. Zend_Db:準備好的語句沒有處理參數
- 24. 如何在查詢中使用準備好的語句與IN子句中PHP
- 25. PHP MySQL準備語句準備()失敗
- 26. Java交叉表 - 準備語句查詢
- 27. Mysql查詢Mysql和準備語句
- 28. EclipseLink JPA2條件查詢準備語句
- 29. 查詢清單,準備語句(JDBC)
- 30. php mysqli綁定參數:在準備好的語句中沒有爲參數提供的數據
你想要什麼或要求功能明智。 ?如果你不想準備一個聲明只是使用mysqli->查詢 – 2011-04-30 10:14:04
我也不明白你的要求,爲什麼你不準備聲明並執行它? – markus 2011-04-30 10:35:16
@molvi。準備好的語句是多次執行查詢的實用程序。認爲我想執行一次查詢。所以我不想爲數據庫準備不必要的開銷。如在內存中緩存查詢計劃 – ahoo 2011-04-30 10:35:19