【问题标题】:PDO - query giving no resultsPDO - 没有结果的查询
【发布时间】:2014-09-23 13:26:00
【问题描述】:

这是我准备好的声明。

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();

这没有结果。

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

感谢任何帮助。

【问题讨论】:

  • 您检查过任何错误吗?
  • 能否请您添加从直接查询获得的结果?所以我们将能够看到你在数据库中有什么......
  • @u_mulder 没有收到任何错误。
  • @RamSharma 列名在 MySQL 中不区分大小写。
  • 我认为问题在于bindParam,因为它是通过引用绑定的。你试过bindValue吗?

标签: php mysql pdo prepared-statement


【解决方案1】:

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

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

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

$sql->execute( $binders );

如手册所述:

the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.

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

【讨论】:

  • 这行得通,仍然不确定为什么bindParam 不工作。再次感谢。
  • 哦,伙计...手册应该特别指出这一点。感谢您澄清它。希望我能投票 100 次 :)
【解决方案2】:

试试这个来绑定值

$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;';
$link->prepare($sql);
$link->execute([
    ':ctid' => 1,
    ':p1' => 'Apple'
]);
$result = $link->fetchAll(PDO::FETCH_ASSOC);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2014-05-12
    • 2013-11-30
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多