簡體   English   中英

對於PHP函數mysqli_real_escape_string(),$ link的用途是什么?

[英]For PHP function mysqli_real_escape_string(), what is the purpose of $link?

mysqli_real_escape_string的PHP文檔指出,鏈接標識符對於轉義字符串是必需的:

字符串mysqli_real_escape_string(mysqli $ link,字符串$ escapestr)

$ link的作用是什么? 為什么必須使用$link來轉義字符串? 以及$link的不同有效值如何可能導致mysqli_real_escape_string的不同返回值呢?

這是一個很好且非常合乎邏輯的問題。 確實,為什么我們需要一個用於瑣碎字符串操作的連接-在某些字符上添加斜杠?

所有這些麻煩都與字符集有關。

$ link包含一個mysqli連接。 mysqli連接包含有關當前字符集的信息。 並且此信息是正確轉義字符串所必需的,具體取決於字符集。 因此,對於某些不同(雖然很奇怪)的字符集,結果的確會有所不同。

此答案中可以找到一個不同的返回值示例。

這就是為什么mysqli_real_escape_string()本身並不好,但是在通過mysqli::set_charset()設置正確的字符集后應始終使用它的mysqli::set_charset()

附帶說明一下,我必須說這個功能已經過時了。 與其手動轉義,不如使用准備好的語句 (並且,對於mysqli而言,此機制是一個很大的WTF,強烈建議使用PDO)。

請參閱下面的“編輯”。

按照手冊:

注意: 對於習慣於使用mysql_real_escape_string()的用戶,請注意mysqli_real_escape_string()的參數不同於mysql_real_escape_string()的期望。 鏈接標識符首先出現在mysqli_real_escape_string()中,而要轉義的字符串首先出現在mysql_real_escape_string()中。

以及來自用戶貢獻的注釋:

注意,如果沒有打開連接,mysqli_real_escape_string()將返回一個空字符串!

現在,在需要連接的mysqli_*函數中需要該連接。

過去,某些mysql_函數(例如mysql_real_escape_string()假定連接已打開,但在mysqli_mysqli_

按照mysql_real_escape_string()

link_identifier MySQL連接。 如果未指定鏈接標識符,則假定使用mysql_connect()打開的最后一個鏈接。 如果找不到這樣的鏈接,它將嘗試創建一個好像沒有參數的mysql_connect()一樣的鏈接。 如果未找到或建立連接,則生成E_WARNING級錯誤。

有關mysqli_ API的更多信息:


編輯:在看到有關我未回答“為什么”的評論后,在信息安全堆棧交換上找到以下問答,這將更好地解釋這一點:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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