在嘗試使用PHP變量作為SQL語句的一部分將值插入MySQL表時,可能會遇到問題。為確保正確執行,務必遵循以下規則:
預處理語句對於添加表示SQL數據文字(字符串或數字)的PHP變量至關重要。必須在SQL語句中用佔位符替換變量,然後準備、綁定和執行查詢。
以下是使用mysqli的示例:
<code><br></br>$type = 'testing';<br></br>$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";<br></br>$stmt = $mysqli->prepare($sql);<br></br>$stmt->bind_param("ss", $reporter, $description);<br></br>$stmt->execute();<br></br></code>
對於PDO,綁定和執行部分可以組合:
<code><br></br>$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";<br></br>$stmt = $pdo->prepare($sql);<br></br>$stmt->execute([$reporter, $description]);<br></br></code>
如果PHP變量表示查詢的一部分(超出數據文字),例如關鍵字或標識符,則必須針對預定義的允許值“白名單”進行檢查。這確保只有有效值包含在查詢字符串中。
以下是針對排序字段名稱的白名單過濾示例:
<code><br></br>$orderby = $_GET['orderby'] ?: "name"; // 设置默认值<br></br>$allowed = ["name", "price", "qty"]; // 允许的字段名称白名单<br></br>$key = array_search($orderby, $allowed, true);<br></br>if ($key === false) {throw new InvalidArgumentException("无效的字段名称");<p>}<br></br></p></code>
白名單過濾後,可以安全地將$orderby變量包含在SQL查詢中。
以上是如何將PHP變量安全地插入MySQL查詢中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!