簡體   English   中英

有沒有可以在mysql查詢中轉義所有特殊字符的作用域?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM