[英]Inserting special characters into SQL database from form
我正在使用PHP将表单值提交到数据库中,但是当用户输入特殊字符(例如撇号)时遇到了一个问题。 例如,如果有人将Bill's Pet Supply
输入组织,则会出现SQL错误。
这是我的代码:
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['submit'])) {
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$organization = $_POST['organization'];
$sql = $conn->prepare("INSERT INTO submissions VALUES (:firstname, :lastname, :email, :organization)");
$sql->bindValue(':firstname', $firstname);
$sql->bindValue(':lastname', $lastname);
$sql->bindValue(':email', $email);
$sql->bindValue(':organization', $organization);
$sql->execute();
}
$conn->close();
如何更改此代码,以便支持撇号和其他特殊字符?
使用带有绑定占位符的 准备好的语句 。 PDO和mysqli都为这些提供支持。
您的SQL文本如下所示:
$sql = "INSERT INTO submissions (firstname, lastname, email, organization)
VALUES (?, ?, ?, ?)";
如果您使用的是mysqli
$sth = $mysqli->prepare($sql);
if(!$sth) {
// handle error
}
$sth->bind_param("ssss", $firstname, $lastname, $email, $organization);
if( $res = $sth->execute() ) {
// process resultset
}
PDO中提供了类似的功能,但是您可以使用“绑定值”代替“绑定参数”。
如果由于某种原因不能使用带有绑定占位符的预准备语句,则至少需要适当地转义 SQL文本中包含的任何可能不安全的值。
如果使用的是mysqli,则生成SQL文本将如下所示:
$sql = "INSERT INTO submissions (firstname, lastname, email, organization)
VALUES ('" . $mysqli->real_escape_string( $firstname )
. "', '" . $mysqli->real_escape_string( $lastname )
. "', '" . $mysqli->real_escape_string( $email )
. "', '" . $mysqli->real_escape_string( $organization )
. "')";
但是不要那样做。 使用带有绑定占位符的准备好的语句 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.