gpt4 book ai didi

php - PDO - 查询没有结果

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:07 26 4
gpt4 key购买 nike

这是我准备好的声明。

SELECT `id`, `title`, `image`, `discount`, `price`, `new_price`, `img_url` FROM `deals` WHERE `active`="1" AND `category`=:ctid AND `img_url`!=""  AND `Brands`=:p1 ORDER BY `order`, `id` ASC LIMIT 0, 12;

这是我在 bindParam 中使用的数组。

Array
(
[:ctid] => 1
[:p1] => Apple
)

这是 PHP 代码:

$sql = 'SELECT `id`, `title`, `image`, `discount`, `price`, `new_price`, `img_url` FROM `deals` WHERE `active`="1" AND `category`=:ctid AND `img_url`!=""  AND `Brands`=:p1 ORDER BY `order`, `id` ASC LIMIT 0, 12;';
$sql = $link->prepare( $sql );

$binders = array(
':ctid' => 1,
':p1' => 'Apple'
);

foreach( $binders as $key => $value ) {
$sql->bindParam( $key, $value );
}

$sql->execute();
$sql->setFetchMode( PDO::FETCH_ASSOC );
$result = $sql->fetchAll();

这没有结果。

但是,如果我进行直接查询,我会从数据库中获得结果。上面的查询可能有什么问题。

感谢任何帮助。

最佳答案

这里的问题是您使用 bindParam 绑定(bind)参数,它使用引用绑定(bind)。在您的情况下,您应该改用 bindValue:

foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}

或者您可以将数组直接传递给 execute() 方法:

$sql->execute( $binders );

如手册中所述:

变量被绑定(bind)为一个引用,并且只会在 PDOStatement::execute() 被调用时被评估。

因此,当您的 foreach 循环结束时,$value 具有最后一个数组项 Apple 的值。因此,当 execute 运行时,:ctid:p1 值都变得等于 Apple。当然,这不是你想要的)

关于php - PDO - 查询没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996358/

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