[英]Selecting from database where id in given array
我正在嘗試從mysql數據庫中的表中選擇元素,其中行ID在給定數組中。
這將返回值:
<?php
$ids = '1,2,3,4';
$DBH = ....
$getID = $DBH->prepare("SELECT * FROM t1 WHERE id IN ($ids)");
$getID->execute();
?>
這不返回任何內容:
<?php
$ids = '1,2,3,4';
$DBH = ....
$getID = $DBH->prepare("SELECT * FROM t1 WHERE id IN (:ids)");
$getID->execute(array(':ids'=>$ids));
?>
我不明白該代碼出了什么問題。
在第一個中,您在與數據庫對話之前使用PHP進行字符串內插; 實際上,使用PHP變量生成SQL代碼。 這就是SQL注入的來源-數據庫不知道數據和代碼之間的區別,因此它無法保護您免於“數據”泄漏到“代碼”空間中。 在第二種方法中,您將使用綁定參數,告訴數據庫“請使用:ids作為單值處理,我稍后將告訴您其內容。” 解決斷開連接的一種簡單方法是:
$sql = 'SELECT * from t1 where id in (' . str_repeat('?', count($ids)) . ')';
$stmt = $pdo->prepare($sql);
$stmt->execute($ids);
查看本教程,以獲取有關這些方面的更多信息。
假設您正在使用PDO,請嘗試以下操作。
<?php
$ids = '1,2,3,4';
$DBH = ....
$getID = $DBH->prepare("SELECT * FROM t1 WHERE id IN (:ids)");
$getID->bindParam(":ids", $ids, PDO::PARAM_INT);
$getID->execute();
?>
當執行原始查詢時,PDO將轉義您的輸入,因此您的查詢看起來像
SELECT * FROM t1 WHERE id IN ("1,2,3,4")
當您告訴PDO綁定為整數時,它將執行
SELECT * FROM t1 WHERE id IN (1,2,3,4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.