我有一个带有几个输入框的表单
<input type='text' name='Last' placeholder='Last Name'/>
<input type='text' name='dob' placeholder='Birth Date'/>
<input type='text' name='height' placeholder='Height'/>
Run Code Online (Sandbox Code Playgroud)
但是如果我在输入框中写入类似4/8/87的日期,它就不会保存到数据库中.同样的情况,如果我写高度为5'7"或电话号码为702-412-4453如果我写那样的.没有什么会保存.我必须写它们所有通用的像4887或57或7024124453
有人可以解释原因或给我一个解决方法吗?
在插入数据库之前,您需要过滤并清理输入.
如果您不使用PHP,请使用mysqli_real_escape_string或您的语言提供的任何类似功能:
<?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')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
Run Code Online (Sandbox Code Playgroud)
这是来自w3school:http://www.w3schools.com/php/func_mysqli_real_escape_string.asp
这将确保插入查询的安全性,并将变量值读取为仅要插入的值,而不是查询语法的一部分.
例如,您插入5'7:
查询将是:
没有逃生:
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '5'7')";
Run Code Online (Sandbox Code Playgroud)
查看5'7废墟查询,所以你需要逃避它:
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '".mysqli_real_escape_string("5'7")."')";
Run Code Online (Sandbox Code Playgroud)
现在5'7不会破坏查询,因为它只能作为要插入的值读取.