2013-03-04 169 views
4

我在電子郵件地址上使用mysqli_real_escape_string(),並返回一個空字符串。它可以通過任何電子郵件地址進行。mysqli_real_escape_string()返回空字符串

<?php 
//from previous page - submitted by user. 
$_POST['email']="[email protected]"; 
$_POST['password']='mypass1234'; 




//Link, I can verify it works. 
$mysql_info=array(
    "url"=>"url", 
    "username"=>"username", 
    "password"=>"password", 
    "database"=>"database" 
); 
$link=mysqli_connect($mysql_info['url'],$mysql_info['username'],$mysql_info['password'],$mysql_info['database']); 


//Now I attempt to sanitize the user input. 
$email=mysqli_real_escape_string($link,$_POST['email']); 
$password=sha1(mysqli_real_escape_string($link,$_POST['password'])); 
var_dump($email); 
var_dump($password);?> 

我的表的排序規則是「latin1_swedish_ci」。

+0

對不起,我的問題是:爲什麼這會返回一個空字符串,我能做些什麼來解決它? – Aehmlo 2013-03-04 03:21:17

+0

您能否將錯誤處理添加到您的代碼? – Kermit 2013-03-04 03:22:09

+0

你的意思是像error_reporting(E_ALL);?已經做了。沒有。 – Aehmlo 2013-03-04 03:25:20

回答

3

如果您的連接爲空($link),它將返回一個空字符串。我測試了這個,它工作得很好。我會建議您將錯誤處理添加到您的連接並啓用錯誤報告。

<?php 
$link = mysqli_connect("localhost", "root", "root", "test"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$_POST['email'] = "[email protected]"; 

$email = mysqli_real_escape_string($link, $_POST['email']); 

var_dump($email); 

mysqli_close($link); 
?> 

結果

string(17) "[email protected]"
+0

原來我的虛擬主機沒有告訴我改變了套接字的位置。謝謝。 – Aehmlo 2013-03-04 03:31:16

+0

實現一個錯誤處理程序總是最好的。在這種情況下,它會指向你的連接。 – Kermit 2013-03-04 03:31:55

+0

我有一個實施,然後拿出來生產。 – Aehmlo 2013-03-04 03:36:00

-1

我有這個問題,發現我的字符集設置爲拉丁文。通過投入解決

$con->set_charset("utf8"); 

之前的real_escape_string。在程序風格中將是mysqli_set_charset。