2010-07-02 132 views
2

我一直在想,時間最長爲什麼我真的需要現場資源SQL連接才能使用mysql_real_escape_string (string $unescaped_string [, resource $link_identifier ])爲什麼在mysql_real_escape_string中有資源?

,這種功能不是簡單地逃脫數據?連接點有什麼意義?我想在沒有連接的情況下使用該功能,我正在辯論創建一個沒有權限的帳戶,只有這樣我才能做到這一點。

我調用一個包裝函數runSQL(user, statement)並返回一個數組或者布爾狀態的數組。

我一直在想使這個runSQL(user, statement, arguments-and-validation-data)

我只想要一個原因。我無法在手冊頁上找到「爲什麼」。

回答

5

正確的轉義部分取決於當前連接的字符集,所以它需要知道有關活動連接的信息。


回覆您的評論,這裏的手冊的鏈接MySQL的C API,它使用的PHP函數:

http://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html

它說:

注意mysql必須是有效的開放式連接。這是必要的,因爲轉義取決於服務器使用的字符集。

+0

你能提供一個鏈接到這個文檔嗎? – Incognito 2010-07-02 18:58:47

4

從mysql_real_escape_string文檔 - http://php.net/manual/en/function.mysql-real-escape-string.php

逃逸的 unescaped_string特殊字符,並考慮到 當前字符集的 連接,從而可以安全放置 它在一個mysql_query()

+0

這就是我一直在尋找的。謝謝。 – Incognito 2010-07-02 19:02:36

+0

獎金回合:有沒有辦法在沒有連接的情況下做到這一點? – Incognito 2010-07-02 19:03:18

+0

不使用'mysql'擴展名,不。請考慮使用更現代的東西,比如PDO,甚至是'mysqli'。 – Charles 2010-07-02 19:36:21

0

可以一次打開多個MySQL連接。通常你會省略資源參數,因爲在腳本中只使用1個MySQL連接,並且默認爲最後打開的連接。