我使用PHP将表单值提交到数据库中,但是当用户输入特殊字符(如撇号)时,我遇到了问题。例如,如果有人将My very cool text is a long text with many words and random sense.
输入组织,则会出现SQL错误。
这是我的代码:
Bill's Pet Supply
如何更改此代码以便支持撇号和其他特殊字符?
答案 0 :(得分:1)
将预备语句与绑定占位符一起使用。 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 )
. "')";
但不要这样做。使用准备好的声明和绑定占位符。