我正在尝试使用PDO将WHERE IN语句合并到一个已经正常工作的查询中。我遍历并使用索引数组的计数动态创建了位置占位符,并遍历了所述数组以绑定每个值。但是,当所有这些都说完之后,我只会得到一个结果,特别是与我动态绑定的最后一个值匹配的结果。
除此之外,如果我只是$arrayToCheck
使用逗号代替来作为定界符,则会$placeholderSpots
得到我期望的全部24个结果。
$arrayToCheck = json_decode($listFromDatabase); //This is a Python List converted to a string using Python's json.dumps, which was then passed into a database table.
$timePeriod = 0;
$rowLimit = 2500;
$placeholderSpots = implode(", ", array_fill(0, count($arrayToCheck), "?"));
$toPull = $GLOBALS['MainDatabase']->prepare("SELECT * FROM datatable WHERE timecolumn >= ? AND idcolumn IN ($placeholderSpots) ORDER BY timecolumn DESC LIMIT ?");
$toPull->bindParam(1, $timePeriod, PDO::PARAM_INT);
$tempCounter = 2;
foreach ($arrayToCheck as $eachID) {
$toPull->bindParam($tempCounter, $eachID, PDO::PARAM_INT);
$tempCounter++;
}
$toPull->bindParam($tempCounter, $rowLimit, PDO::PARAM_INT);
if ($toPull->execute()) {
while ($pulledData = $toPull->fetch(PDO::FETCH_ASSOC)) {
//Data Is Processed Here
}
}
您需要替换bindParam()
为bindValue()
。
foreach ($arrayToCheck as $eachID) {
$toPull->bindValue($tempCounter++, $eachID, PDO::PARAM_INT);
}
该bindParam()
方法通过引用绑定到变量。遍历数组时,您每次都会为同一个变量分配一个新值,因此变量不会更改,只有值会更改。最终结果是,您绑定了相同的变量多次,该变量保存了数组中的最后一个值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句