MySQL語句中的占位符在數據查詢和數據操作中扮演著非常重要的角色,使用占位符可以避免直接將用戶數據拼接到SQL語句中而引起的SQL注入攻擊,同時也可以提高查詢性能。
$mysqli = new mysqli("localhost","user","password","db_name"); $stmt = $mysqli->prepare("SELECT * FROM `users` WHERE `username` = ? AND `age` = ?"); $stmt->bind_param("si", $username, $age); $username = "john"; $age = 20; $stmt->execute(); $result = $stmt->get_result(); while($row = $result->fetch_assoc()) { echo $row['username'].' '.$row['age'].'
'; } $stmt->close(); $mysqli->close();
在上面的例子中,我們使用了占位符 ? 來代替了SQL語句中的變量,同時使用了bind_param()方法將變量與占位符進行綁定,這里第一個參數是描述數據類型和順序的字符串,s表示字符串類型,i表示整型。接下來的參數則是按順序對應的變量名。最后執行execute()方法執行查詢,使用get_result()方法獲取查詢結果集,使用fetch_assoc()方法逐行獲取結果集中的數據。
$mysqli = new mysqli("localhost","user","password","db_name"); $stmt = $mysqli->prepare("INSERT INTO `users`(`username`, `age`) VALUES (?, ?)"); $stmt->bind_param("si", $username, $age); $username = "john"; $age = 20; $stmt->execute(); $stmt->close(); $mysqli->close();
在上面的例子中,我們使用了占位符 ? 來代替了SQL語句中的變量,同時使用了bind_param()方法將變量與占位符進行綁定,這里第一個參數是描述數據類型和順序的字符串,s表示字符串類型,i表示整型。接下來的參數則是按順序對應的變量名。最后執行execute()方法執行插入。
在使用占位符時需要注意,使用占位符的場景必須是硬編碼SQL查詢的地方,例如 SELECT、INSERT、UPDATE、DELETE 等語句中的字段和表名不應該是動態生成的,否則就存在 SQL 注入的風險。使用占位符時還需要注意類型匹配,確保占位符的類型和綁定的變量類型一致,否則執行時就會出錯。