Я использую mysqli_real_escape_string () на адрес электронной почты и возвращает пустую строку. Он делает это с любым адресом электронной почты.
<?php //from previous page - submitted by user. $_POST['email']="aehmlo@aehmlo.com"; $_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».
Если ваше соединение пуст ( $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'] = "aehmlo@aehmlo.com"; $email = mysqli_real_escape_string($link, $_POST['email']); var_dump($email); mysqli_close($link); ?>
результат
строка (17) "aehmlo@aehmlo.com"
У меня была эта проблема, и я обнаружил, что мой набор символов установлен на латинский. Решено, поставив
$con->set_charset("utf8");
перед real_escape_string. Будет mysqli_set_charset в процедурном стиле.