簡體   English   中英

從表單將特殊字符插入SQL數據庫

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

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

但是不要那樣做。 使用帶有綁定占位符准備好的語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM