簡體   English   中英

從數據庫中選擇給定數組中的ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM