gpt4 book ai didi

php pdo 绑定(bind)多个值问题

转载 作者:行者123 更新时间:2023-11-29 05:33:22 25 4
gpt4 key购买 nike

我在 php 中有以下代码,用于根据客户端发送的数组查询数据库。

$limit = $_POST['limit'];
$userArray = json_decode($_POST['arr'], true);
$queryPlaceholders= implode(',', array_fill(0,count($userArray), '?'));
$stmt = $db->prepare("SELECT * FROM tableA
WHERE tableA.id IN (".$queryPlaceholders.")
LIMIT ?");
foreach($userArray as $k => $val){
$stmt->bindParam(($k+1), $val);
}
$stmt->bindValue(count($userArray) + 1, (int)trim($limit), PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo $result;

此代码似乎有错误。如果我发送一个包含值 11 和 17 的数组,查询似乎只使用值 17 运行,而不是同时使用 11 和 17。

如果我 print_r($userArray) 我得到 Array
(
[0] => 11
[1] => 17
)

所以我知道 php 有正确的数组。然而,使用上面的代码运行这个查询,并运行下面的查询会产生不同的答案:

SELECT * FROM tableA
WHERE tableA.id IN (11,17)
LIMIT 10

当运行上面的代码时,它似乎实际上运行了这个查询?

SELECT * FROM tableA
WHERE tableA.id IN (17)
LIMIT 10

我还在 foreach 循环中放置了语句,告诉我数组的两个元素(11 和 17)都绑定(bind)到 $stmt

最佳答案

问题是您正在使用 bindParam() :

Binds a PHP variable to a corresponding named or question mark placeholder in the SQL statement that was use to prepare the statement. Unlike PDOStatement::bindValue(), the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.

由于 $valforeach 循环的每次迭代中都会发生变化,因此在最终执行查询时每个占位符最终都是相同的。

关于php pdo 绑定(bind)多个值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com