HI我很困惑,以確定用戶想要查詢數據庫中的哪一列。如何使用PHP PDO識別自定義sql查詢中的佔位符?
考慮這個查詢語句:
$db->retrieve("SELECT firstname, lastname FROM records WHERE id = :id", array('id' => 1));
問題/混亂是我怎麼可能,如果用戶想通過不同的條件等,其中姓氏=查詢確定:名字?
感謝您的未來幫助。
HI我很困惑,以確定用戶想要查詢數據庫中的哪一列。如何使用PHP PDO識別自定義sql查詢中的佔位符?
考慮這個查詢語句:
$db->retrieve("SELECT firstname, lastname FROM records WHERE id = :id", array('id' => 1));
問題/混亂是我怎麼可能,如果用戶想通過不同的條件等,其中姓氏=查詢確定:名字?
感謝您的未來幫助。
下面是你可以做的一個例子。雖然這可以根據您的需要進行修改。
$queries = array(
'id' => 1,
);
$parameters = array();
$sql = " SELECT firstname, lastname FROM records WHERE ";
foreach($queries as $column => $value) {
$sql .= $column.'=:'.$column;
$parameters[":$column"] = $value; // binding parameter
}
$db->execute($parameters); // execute query with parameters
echo $sql;
print_r($parameters);
輸出
SELECT firstname, lastname FROM records WHERE id=:id
和您的參數是:Array ([:id] => 1)
然後查詢需要是動態的,只要確保白名單也是你列如果用戶輸入與它作爲好。 – Ghost
你可以在沒有用戶輸入的情況下動態生成列,並且只通過一個開關將用戶輸入插入到發送給它的參數中,例如:(假設輸入姓氏的情況下)'$ sql。='lastname =:input';'然後綁定參數 - 用戶輸入的方式永遠不會觸及SQL本身 - 只是綁定它的參數。 – Fluffeh
@Fluffeh 因此,即使其他佔位符目前沒有像這樣查詢,我會做一個函數和綁定: $ sth-> bindParam(':id',$ id,PDO :: PARAM_INT); $ sth-> bindParam(':lastname',$ lname,PDO :: PARAM_STR); $ sth-> bindParam(':firstname',$ fname,PDO :: PARAM_STR); –