2013-10-23 55 views
2

雖然,我在閱讀mysqli->real_escape_string,在PHP.net#mysqli_real_escape_string。幾行,我不明白他們的意思,並且字符集是安全,而使用real_escape_string哪個字符集對Mysqli是安全的 - > real_escape_string

注意安全:默認字符集

的字符集必須設置或者在服務器級別,或與 API函數mysqli_set_charset()會影響 mysqli_real_escape_string()。有關更多信息,請參閱字符 集的概念部分。

是否有人可以解釋我,無論utf-8default latin安全與否: - 在這裏http://in1.php.net/manual/en/mysqli.real-escape-string.php

這裏是他們的代碼片段描述的情況這是什麼意思?

<?php 

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

// Will not affect $mysqli->real_escape_string(); 
$mysqli->query("SET NAMES utf8"); 

// Will not affect $mysqli->real_escape_string(); 
$mysqli->query("SET CHARACTER SET utf8"); 

// But, this will affect $mysqli->real_escape_string(); 
$mysqli->set_charset('utf8'); 

?> 

感謝

回答

4

任何字符集,如果你使用的是mysqli_set_charset()

此外,utf-8和默認latin是,即使你是不是安全。

該過程涉及兩方面。服務器和客戶端。客戶端是你的PHP腳本。所以,僅僅是因爲在客戶端(即在PHP)中進行轉義,PHP必須知道如何轉義數據。這到底是什麼mysqli_set_charset() - 它要麼讓服務器知道傳入的數據編碼和沒有讓real_escape_string知道什麼編碼數據

雖然SET NAMES查詢不只是工作的一部分,只有通知服務器,在默認狀態下離開real_escape_string。 。然而,utf-8和默認latin無論如何都是無懈可擊的。

+0

+1正好.... –

+0

如果我不使用任何'mysqli_set_charset()'函數,我還安全嗎? –

相關問題