在向数据库输入数据时,我找不到mysqli_real_escape_string
没有添加反斜杠的任何原因。我检查了手册,并说它是
mysqli_real_escape_string
需要有2个参数。其他参数是您的数据库连接,当我检查数据库中的数据时,我发现单引号并且没有添加反斜杠。下面的代码可能有问题。我不知道如何使用准备好的陈述,请帮忙..!
function open_handler()
{
// Connects to MYSQL
$connect = new mysqli(HOST,USER,PASS,DB);
// Logic Checks
if($connect)
{
// MYSQL SET TO UTF8 ENCODING
@mysqli_query('set names "utf-8"');
@mysqli_query('set character set "utf8"');
@mysqli_query('set character_set_server="utf8"');
@mysqli_query('set collation_connection="utf8_general_ci"');
}
if(!$connect)
{
die('UNABLE TO CONNECTION TO MYSQL SERVER');
}
return $connect;
}
function add_user($uname,$pwd,$email)
{
$n_uname = mysqli_real_escape_string(open_handler(),$uname);
$n_pwd = $pwd;
$n_email = $email;
$sql = sprintf("INSERT INTO `users` SET
`uname`='%s',
`pwd`='%s',
`email`='%s',
$n_uname,$n_pwd,$n_email);
$query = mysqli_query(open_handler(),$sql);
// logic check
if(!$query)
{return FALSE;}
else
{return TRUE;}
@mysqli_free_result($query);
}
答案 0 :(得分:4)
函数mysqli_real_escape_string()
转义sql-breaking字符,例如单引号,但仅在数据库事务期间。换句话说,它不会永久修改您的数据以包含反斜杠。
这使您可以“安全地”插入/更新/查询数据库,而无需修改数据。
如果您需要以更“永久”的方式使用反斜杠转义数据,您可以使用addslashes()
,然后当您想要删除它们时,您可以使用{{3 }}
mysqli_real_escape_string()
的替代方案,请使用stripslashes()
:
$conn = open_handler();
$stmt = mysqli_prepare($conn, "INSERT INTO users (uname, pwd, email) VALUES (?, ?, ?);");
mysqli_stmt_bind_param($stmt, "s", $uname);
mysqli_stmt_bind_param($stmt, "s", $pwd);
mysqli_stmt_bind_param($stmt, "s", $email);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);