为什么mysql_real_escape_string
无法使用此代码?
通常情况下,加载页面输入将如下所示。
http://image.free.in.th/v/2013/ie/160812064246.jpg
但是当您加载页面www.example.com/test.php?value_1=">
为什么输入看起来像这样。
http://image.free.in.th/v/2013/ia/160812064312.jpg
我该怎么办?
test.php的
<?PHP
include("connect.php");
$ex_search_value = mysql_real_escape_string($_GET['value_1']);
?>
<input placeholder="PLEASE ENTER" value="<?PHP echo $ex_search_value; ?>" style=" margin: 0px; width: 810px;height: 33px;line-height: 17px;line-height: 33px\0;^line-height: 33px;padding: 0px;margin-right: -1px;padding-left: 5px;-webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.1);-moz-box-shadow: 0 2px 3px rgba(0,0,0,0.1); box-shadow: 0 2px 3px rgba(0,0,0,0.1); ">
答案 0 :(得分:1)
mysql_real_escape_string
转义数据,因此您可以安全地将其放入SQL查询中,然后发送给MySQL。 (注意:mysql_real_escape_string
is part of an obsolete API you should have stopped using about half a decade ago。)
value="<?PHP echo $ex_search_value; ?>"
那不是SQL。那就是你发送到网络浏览器的HTML。
HTML是与SQL不同的语言。逃避规则是不同的,甚至没有微妙的不同,它们是完全不同的。
您需要使用htmlspecialchars()
来转义数据,以便适合插入HTML。
答案 1 :(得分:-2)
不推荐使用mysql API,你真的不应该使用它来尝试使用mysqli
这是语法
mysqli_real_escape_string(connection,escapestring);
它需要连接对象和你想要转义的字符串
这是一个很好的例子
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '$age')";
$query = mysqli_query($con, $sql);
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>