首頁 > 後端開發 > php教程 > 如何在 MySQL 語句中安全地包含 PHP 變數?

如何在 MySQL 語句中安全地包含 PHP 變數?

Barbara Streisand
發布: 2024-12-25 08:10:29
原創
263 人瀏覽過

How Can I Safely Include PHP Variables in MySQL Statements?

在 MySQL 語句中包含 PHP 變數

在 VALUES 語句中使用 PHP 變數將值插入表格時遇到問題。了解將 PHP 變數整合到 MySQL 語句中的正確方法至關重要。

利用準備好的語句

將資料文字(SQL 字串或數字)插入 MySQL 語句需要使用準備好的語句。它涉及:

  1. 在SQL 語句中用佔位符取代變數
  2. 準備修改後的查詢
  3. 將變數綁定到佔位符
  4. 執行查詢

新增使用Mysqli

進行資料文字

在PHP 8.2 中,這些步驟可以合併為一個呼叫:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$mysqli->execute_query($sql, [$reporter, $description]);
登入後複製

對於較舊的PHP 版本:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();
登入後複製

新增資料文字PDO

PDO提供了一個簡化的方法:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);
登入後複製

過濾其他查詢部分的變數

代表查詢部分的變數除文字(關鍵字、識別碼)以外的內容應透過白名單進行過濾。這可以防止插入意外的值。

例如,依照使用者輸入過濾欄位名稱:

$orderby = $_GET['orderby'] ?: "name"; // set the default value
$allowed = ["name", "price", "qty"]; // the white list of allowed field names
$key = array_search($orderby, $allowed, true); // see if we have such a name
if ($key === false) { 
    throw new InvalidArgumentException("Invalid field name"); 
}
登入後複製

以上是如何在 MySQL 語句中安全地包含 PHP 變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板