在 VALUES 語句中使用 PHP 變數將值插入表格時遇到問題。了解將 PHP 變數整合到 MySQL 語句中的正確方法至關重要。
將資料文字(SQL 字串或數字)插入 MySQL 語句需要使用準備好的語句。它涉及:
在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提供了一個簡化的方法:
$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中文網其他相關文章!