回答
您應該使用單引號和mysql_real_escape_string的組合或移至PDO。
的mysql_real_escape_string將帶您清潔制要存儲數據庫和單引號上會阻止它裏面的任何執行任何不潔變量的照顧。
下面是一個例子:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
PDO的例子:
$dbh = new PDO('mysql:dbname=your_database;host=your_host', $user, $password);
$stmt = $dbh->prepare('SELECT * FROM users WHERE user = :username AND password = :password');
$stmt->execute(array('username' => $user, 'password' => $password));
如果沒有適當的清潔制數據,你將要保存你可以從SQL注入受損。
例如正常查詢
SELECT * FROM users WHERE user = 'test'
注入查詢:
SELECT * FROM users WHERE user = 'anything' OR 'x'='x'
另一個例子:
SELECT * FROM users WHERE user = ' '; DROP TABLE users
More about SQL injection attack:SQL injection prevention,MySQL Injection
使用哪一個更容易或更方便。如果它們對你來說都是一樣的話,那麼單引號是更便攜的,至少是理論。
如果正在生成查詢從-例如-PHP,然後單引號都比較方便寫作的SQL查詢,因爲雙引號允許PHP表達式來代替變量。
$query = "SELECT * FROM $sometable WHERE somefield = '1'";
根據PHP的規則,單引號(如果他們被使用)防止$sometable
擴張。
至於理論便攜性,我已經使用了Oracle,MySQL和MS SQL服務器,SQL精簡版,以及一些本土口味,和從未有過的問題,無論是引號字符。
單引號是PHP更加嚴格。例如,單引號不允許在字符串內部替換變量。
$myval = "world";
echo "Hello $myval"; // produces "Hello world"
echo 'Hello $myval'; // produces "Hello $myval"
此外,你會認爲,由於單引號更嚴格,他們也會更有效,但事實並非如此。 PHP字符串操作的表現是一個有趣的(和記錄)的事情as seen here。
字符串包含在雙引號是在PHP腳本中最常用的,因爲它們提供了最大的靈活性。這是因爲變量和轉義序列都將被相應地解析。
當字符串應完全按照陳述進行解釋時,在單引號內包含一個字符串非常有用。這意味着當解析字符串時,變量和轉義序列都不會被解釋。
雙引號派上用場,當你在你的MySQL語法
$query = "SELECT * FROM tableName WHERE columnName = '{$value}'";
單引號如果你的MySQL服務器與--ansi
標誌運行,則"
雙引號"
將停止工作。 SQL字符串必須包含在單引號'
中。
或更具體地說,雙引號實際上表現得像反引號。它們可以用於列名稱:
SELECT "colum&name", `x&y` FROM "fictional-query"
WHERE strcolumn = 'text' OR "column&name" = 'string'
但是,如果mysqld沒有在ansi兼容模式下運行,那麼也會失敗。只有這樣的話,雙引號才能相當於字符串的單引號。這就是爲什麼他們應該避免。
- 1. PHP,單引號或雙引號更快?
- 2. Mysql PHP插入引號和雙引號
- 3. 何時使用雙引號和單引號php mysql
- 4. 試圖逃脫單引號和雙引號的PHP MySQL查詢
- 5. 用雙引號或單引號打印HTML和PHP代碼
- 6. 使用單引號或雙引號
- 7. Node.js中的單引號或雙引號?
- 8. 使用單引號或雙引號
- 9. 雙引號內的PHP單引號
- 10. PHP單引號VS雙引號
- 11. 單引號裏面雙引號php
- 12. PHP - 郵件() - 單引號對雙引號
- 13. 單引號,雙引號,用PHP
- 14. 單引號VS雙引號
- 15. opencsv轉義單引號和雙引號
- 16. Ansible轉義雙引號和單引號
- 17. str_replace雙引號和單引號
- 18. Django json單引號和雙引號?
- 19. 單引號和雙引號在Python中
- 20. 雙引號和單引號的區別
- 21. Excel轉義單引號和雙引號
- 22. grep模式單引號和雙引號
- 23. 帶單引號,雙引號或三引號的Lex字符串
- 24. 如何提取引號(雙引號或單引號)
- 25. PHP的MySQL的雙引號不是單引號
- 26. 雙單引號到雙引號
- 27. 單引號或雙引號PHP Echo語法錯誤?
- 28. PHP - 單引號或雙引號SQL查詢?
- 29. 避免MySQL注入替換單引號和雙引號
- 30. 如何在MySQL select中轉義單引號和雙引號?
很確定SQL中的ANSI標準是單引號。尋找一個參考 – Phil 2011-05-04 02:45:31
可能重複[在SQL中的單引號和雙引號之間的區別是什麼?](http://stackoverflow.com/questions/1992314/what-is-the-difference-between-single-and-double -quotes-in-sql) – 2011-05-04 02:45:42
@Phil Brown:ANSI-92支持對象名稱的雙引號 - 大多數數據庫都支持雙引號,以便指定非標準字符。 – 2011-05-04 02:47:07