[英]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.