- 是否有任何PDO的替代品,因爲在MySQL是mysql_real_escape_string?
- 爲什麼我們應該設置'false' - > ATTR_EMULATE_PREPARES常量?
回答
- 你沒有在事先準備好的聲明中使用mysql_real_escape_string在PDO
- 不一定。你可以用任何一種方式
要回答的問題編輯
NO,有沒有辦法。你應該使用準備好的語句。
2.爲什麼不準確? – deceze
是什麼原因造成的,而不是停用仿真(至少對於較新的數據庫版本)?我從來沒有深究這個問題的底部,我仍然不確定要使用什麼。 – martinstoeckli
難怪因爲沒有一個答案*應該*使用。或者是可以接受的 –
使用mysql擴展,只有這樣,才能動態地嵌入值插入查詢是:
$query = "SELECT ... WHERE foo = '$bar'";
爲了避免在最壞的情況下,可以利用如SQL注入語法錯誤,你需要申請mysql_real_escape_string
到$bar
這裏以轉義的值正確。如果您不知道這意味着什麼,請閱讀The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。
準備語句提供通過完全分離的查詢和所述值,以使用動態值完全不同的方式:
$stmt = $db->prepare('SELECT ... WHERE foo = :bar');
$stmt->execute(array(':bar' => $bar));
這實際上是發送到數據庫作爲兩個單獨的件;語法永遠不會被搞砸或被利用,因爲這兩個部分從來沒有實際合併過。
儘管所有數據庫都不支持此功能,但有些(舊的)數據庫仍然希望使用舊式的未準備好的轉義查詢。 ATTR_EMULATE_PREPARES
給出了選項,好吧,模擬準備好的語句。您仍然可以在代碼中使用$db->prepare()->execute()
API,但在幕後,PDO將轉義該值並將其連接到查詢中。要明確禁止PDO執行此操作並強制它使用數據庫提供的本地準備語句API,請將ATTR_EMULATE_PREPARES
設置爲false
。
如果您的數據庫本地支持預處理語句,則應該執行此操作;最近的所有數據庫都是這樣。如果讓PDO模擬預準備語句,則在某些條件下(主要是在人工構建的多字節連接編碼情況AFAIK下),SQL注入的可能性仍然很小。
在任何情況下,您都不能使用mysql擴展中的函數和PDO擴展;它不會起作用,因爲mysql_real_escape_string
需要通過mysql_connect
建立單獨的數據庫連接。
自5.3.6 PDO不會讓這個虛構的機會 –
- 1. 爲什麼不能禁用PDO :: ATTR_EMULATE_PREPARES?
- 2. PDO MySQL:是否使用PDO :: ATTR_EMULATE_PREPARES?
- 3. PDO :: ATTR_EMULATE_PREPARES問題
- 4. PDO :: ATTR_EMULATE_PREPARES =>假
- 5. 什麼是PDO,我爲什麼要使用它?
- 6. mysql_real_escape_string與PDO PHP
- 7. 我爲什麼要在我的應用程序中使用PDO?
- 8. 爲什麼在需要之前選擇?
- 9. 什麼是... mysql_real_escape_string?危險嗎?
- 10. PHP:爲什麼我的PDO選擇不起作用?
- 11. 爲什麼我的mysql_real_escape_string不起作用?
- 12. 受PostgreSQL中ATTR_EMULATE_PREPARES影響的PDO異常
- 13. 爲什麼mysql_real_escape_string()不應該避免任何SQL注入?
- 14. PDO選擇什麼都不返回
- 15. PHP從mysql_real_escape_string改爲PDO的表名
- 16. 使用PHP,爲什麼選擇的選項不總是工作?
- 17. PDO mysql_real_escape_string如何在準備好的陳述中使用
- 18. 爲什麼在mysql_real_escape_string中有資源?
- 19. PDO :: FETCH_ASSOC什麼是PDO :: FETCH_ARRAY?
- 20. 爲什麼選擇菜單需要window.location?
- 21. 將PDO :: ATTR_EMULATE_PREPARES設置爲false不起作用
- 22. 在$ PDO_OPTIONS中將PDO :: ATTR_EMULATE_PREPARES設置爲False時出錯
- 23. PDO :: ATTR_EMULATE_PREPARES(多種綁定和限制)
- 24. 錯誤處理對於PDO :: ATTR_EMULATE_PREPARES =>假
- 25. 如何在ATTR_EMULATE_PREPARES關閉時模擬PDO中的DEFAULT參數?
- 26. aosp's lunch combos的含義是什麼?我需要選擇什麼?
- 27. 爲什麼在SQL查詢中使用Prepard Statements/mysql_real_escape_string
- 28. 要選擇什麼版本?
- 29. 爲什麼要檢查mysql_real_escape_string()的返回值
- 30. 未調用UISwipeGestureRecognizer選擇器。任何想法爲什麼?
瞭解'PDO預處理語句' – Fabio
*您不*使用'mysql_real_escape_string'和預處理語句。閱讀[偉大的逃避現實(或:你需要知道如何處理文本中的文本)](http://kunststube.net/escapism/),特別是在最後。 – deceze
您可以在[PHP文檔](http://www.php.net/manual/en/pdostatement.execute.php)中找到如何使用參數化查詢的示例。有了這些準備好的陳述,你不必自己逃脫任何事情,PDO會照顧它。 – martinstoeckli