如何正确使用mysqli_real_escape_string

时间:2015-10-09 16:38:50

标签: php mysqli

我遇到了一个问题,我无法解决这个问题。

如果名称包含萎缩(单引号),则将名称保存到mysql数据库时,我会收到意外结果。

我使用$name = mysqli_real_escape_string($con, $name);保存了名称,其中$con是连接字符串,$name是名称。然而,作为Peter O' Toole而不是$name回归,我得到的是Peter O \

有人可以告诉我这里哪里出错吗?

1 个答案:

答案 0 :(得分:2)

当您将mysql_ *更改为mysqli时,不需要使用相同的样式,请使用预准备语句。

旧式

$name = mysqli_real_escape_string($_POST['name']);
$email = mysqli_real_escape_string($_POST['email']);
$password = mysqli_real_escape_string($_POST['password']);

$sql = "INSERT INTO `user`(name, email, password) VALUES('$name', '$email', '$password'));

$mysql_query($sql) or die(mysql_error());

bind_param()通知日期类型:

s => string
i => integer
d => double
b => blob

准备stamentes风格

$db = new mysqli(...);
$sql = "INSERT INTO `user`(name, email, password) VALUES(?,?,?)";
$stmt = $db->prepare($sql);
$stmt->bind_param('sss', $name, $email, $password);

if(!$stmt->execute()){
    echo $db->error;
}