[英]Are there any scope that escape all special characters in mysql query?
我有一組要插入數據庫的隨機數據查詢。 隨機數數據可以具有任何特殊字符。 例如:
INSERT INTO tablename VALUES('!^'"twco\dq');
是否有范圍可以轉義所有特殊字符?
請幫忙。
您可以使用\\
字符轉義特殊字符,如下所示。 如有疑問,請參閱此演示 。
INSERT INTO tablename VALUES('\!\^\'\"twco\\dq');
根據MySQL
文檔,以下是定義的轉義序列
Table 9.1 Special Character Escape Sequences
\0 An ASCII NUL (0x00) character.
\' A single quote (“'”) character.
\" A double quote (“"”) character.
\b A backspace character.
\n A newline (linefeed) character.
\r A carriage return character.
\t A tab character.
\Z ASCII 26 (Control+Z). See note following the table.
\\ A backslash (“\”) character.
\% A “%” character. See note following the table.
\_ A “_” character. See note following the table.
不,MySQL中沒有“范圍”可以自動轉義所有特殊字符。
如果您的文本文件包含使用可能不安全的“隨機值”創建的語句,如下所示:
INSERT INTO tablename VALUES('!^'"twco\dq');
^^^^^^^^^^^
您基本上被搞砸了。 MySQL不能解擾一個雞蛋。 沒有“模式”可以使MySQL使用這樣的語句。
幸運的是,該特定語句將引發錯誤。 更悲慘的是一些邪惡的隨機數據,
x'); DROP TABLE students; --
如果該隨機字符串被合並到您的SQL文本中而沒有被轉義,則結果將是:
INSERT INTO tablename VALUES('x'); DROP TABLE students; --');
必須先將特殊字符轉義, 然后再將值合並到SQL文本中。
您需要獲取隨機字符串值:
!^'"twco\dq
並通過執行必要的轉義的函數運行該函數,以確保將該值安全地包含在SQL語句中。
MySQL提供real_escape_string_function
作為其C庫的一部分。 參考https://dev.mysql.com/doc/refman/5.5/en/mysql-real-escape-string.html 。 通過MySQL連接器可以使用幾種語言來顯示相同的功能。
一種更好的“轉義”模式是使用帶有綁定占位符的 預備語句 ,因此您的語句將是靜態文字,如下所示:
INSERT INTO tablename VALUES ( ? )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.