2013-03-04 170 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。