問題:
在PHP 中,在MySQL 語句中使用變數VALUES 中包含的MySQL語句會導致
問題:
為什麼在 VALUES 中包含變數會導致錯誤?
答案:
有兩種不同的方法可以在MySQL 語句中包含PHP 變數正確:
使用準備語句:
對於表示SQL資料文字(字串、數字)的變量,必須使用準備語句。這牽涉到:範例(mysqli):
$type = 'testing'; $sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $mysqli->execute_query($sql, [$type, $reporter, $description]);
使用白名單過濾:
對於表示查詢部分的任何其他變數(例如關鍵字、識別碼),必須透過白名單過濾它們,確保僅使用允許的值。 範例(檢查orderby):
$orderby = $_GET['orderby'] ?: 'name'; $allowed = ['name', 'price', 'qty']; $key = array_search($orderby, $allowed); if ($key === false) throw new InvalidArgumentException("Invalid field name");
結論:
遵守這些原則可以防止SQL 注入和確保SQL 注入和確保涉及PHP 變數時查詢的正確執行。準備好的語句應用於資料文字,而白名單可確保僅允許的值插入查詢的其他部分。以上是為什麼 PHP 變數在 MySQL 的 VALUES 子句中使用時會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!