任何人都可以給我舉例說明如何使用MySQL/PHP的參數化查詢嗎?參數化查詢的例子
參數化查詢的例子
回答
參數化查詢本質上是抽象了所有輸入的查詢。這有幾個好的副作用,比如使所有輸入無害(即不會有害注入是可能的),並且在重複使用時使其更快,因爲它是預分析和編譯的,所以引擎知道如何應用所給出的輸入。在純MySQL的一個例子是:
PREPARE qry FROM "INSERT INTO tbl VALUES (?)";
語句現在被編譯和緩存,可以無需重新編譯和解釋它多次執行:
SET @var = "some input";
EXECUTE qry USING @var;
SET @var = "some other input";
EXECUTE qry USING @var;
當在PHP中使用,它通常像此(縮短):
$stmt = prepare('INSERT INTO tbl VALUES(?)');
execute($stmt, array("some input"));
execute($stmt, array("some other input"));
execute($stmt, array("some more input"));
我不完全理解這是如何停止SQL注入的。我並不懷疑它的確存在,但你能否進一步解釋它? – 2010-05-19 04:01:18
因爲查詢是在任何參數放入之前預先編譯的。即使有一個參數是「DELETE FROM stuff」,或者類似的東西,它只會插入到編譯語句所說的任何地方,作爲一個完整的字符串,它不會通過解析器,因爲主語句已經被解析過了,你可以把它和'eval()'比較一下,比如''eval(「new Class($ data);」)''將數據看作是'); delete_all_my_files('。預編譯語句基本上意味着你避免了「eval」問題。 – 2010-05-19 10:34:40
PREPARE stmt_name FROM "SELECT name FROM Country WHERE code = ?";
SET @test_parm = "FIN";
EXECUTE stmt_name USING @test_parm;
- 1. 帶子查詢的參數化選擇查詢的RODBCext語法示例
- 2. 參數化SQL中的子查詢
- 3. 難以參數化Python SQLite子查詢
- 4. 參數化MySQL查詢IN子句
- 5. 參數化查詢
- 6. 參數化查詢
- 7. 參數化查詢
- 8. ColdFusion的參數化查詢
- 9. 簡化非參數化查詢MySQL的
- 10. 如何參數化查詢?
- 11. MSSQL參數化查詢
- 12. 從參數化SQL查詢
- 13. Postgresql參數化查詢
- 14. 參數化查詢Visual Basic
- 15. 參數化WHERE在查詢
- 16. 插入參數化查詢
- 17. 從參數化SQL查詢
- 18. 參數化查詢問題
- 19. SPARQL參數化查詢
- 20. C#mysql參數化查詢
- 21. Python - MySQLdb參數化查詢
- 22. ASP/MySQL - 參數化查詢
- 23. 有關參數化查詢
- 24. pymysql:MySQL參數化LIKE查詢
- 25. 參數化查詢jqgrid
- 26. Crystal Reports參數化查詢
- 27. SQL參數化查詢CTE
- 28. Npgsql F#參數化查詢
- 29. 參數化查詢太慢
- 30. VB.Net參數化LIKE查詢
http://www.google.com.au/search?hl=en&source=hp&q=+MySQL++parameterized+queries&meta=&aq=f&oq= – 2009-12-12 17:05:29