【问题标题】:Why my "where condition" with numeric is not working?为什么我的带有数字的“位置条件”不起作用?
【发布时间】:2016-05-03 16:35:45
【问题描述】:

我正在使用 php5+ 和 MySQL。

我无法弄清楚为什么我的操作不起作用:

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > :specific_date');
$prepare->execute(array(':specific_date' => $date));

使用 fetchAll,这会为我提供 cm_name 中带有“铭文”的所有条目。 另一方面:

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > '.$date.' ');
$prepare->execute();

完美返回 cm_name 中带有“inscription”且“cm_values”优于 $date...的条目...

我不知道我做错了什么?

感谢您的帮助,并原谅我的英语......

编辑:我使用时间戳来存储日期,所以 $date 是数字。

再次编辑: 如 cmets 所述,我的参数格式有问题。类似的东西

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > :specific_date');
$prepare->bindParam(':specific_date', $date, PDO::PARAM_INT);
$prepare->execute();

有效...所以我现在必须了解如何在 execute() 中使其有效...

【问题讨论】:

  • 我猜在第二个例子中你比较的是strings而不是datesc_metas 可能是 EAV 表,其中 cm_values 列作为文本。试试:WHERE CAST(cm.cm_name AS DATE) >
  • 我实际上使用时间戳(我知道是老派)所以 specific_date, $date 是数字。

标签: php mysql pdo where numeric


【解决方案1】:

:specific_date”是一个字符串,你想调用一个变量$date。它们是不同的东西,所以它们会产生不同的结果。

【讨论】:

  • 我不明白。 :specific_date 应该通过 execute() 引用 $date,不是吗? (顺便说一句,我使用的是时间戳,所以我的日期是数字)
【解决方案2】:

其实

$prepare = $bbd->prepare('SELECT cm.cm_values FROM c_metas as cm WHERE cm.cm_name = "inscription" AND cm.cm_values > :specific_date');
$prepare->bindValue(':specific_date', $date, PDO::PARAM_INT);
$prepare->execute();

修复了整个问题。 谢谢你们的回答。

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2011-12-20
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多