从表单中将特殊字符插入SQL数据库

时间:2016-07-08 16:04:25

标签: php mysql forms

我使用PHP将表单值提交到数据库中,但是当用户输入特殊字符(如撇号)时,我遇到了问题。例如,如果有人将My very cool text is a long text with many words and random sense. 输入组织,则会出现SQL错误。

这是我的代码:

Bill's Pet Supply

如何更改此代码以便支持撇号和其他特殊字符?

1 个答案:

答案 0 :(得分:1)

预备语句绑定占位符一起使用。 PDO和mysqli都为这些提供了支持。

您的SQL文本如下所示:

$sql = "INSERT INTO submissions (firstname, lastname, email, organization)
VALUES (?, ?, ?, ?)";

如果您使用的是mysqli

mysqli_prepare

myslqi_bind_param

myslqi_execute

$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 )
  . "')";

但不要这样做。使用准备好的声明绑定占位符