【问题标题】:MySql query price between rangeMySql查询价格区间
【发布时间】:2021-12-13 11:50:27
【问题描述】:

好的,所以我对我的搜索页面进行了以下查询:

SELECT * FROM `posts` WHERE `ad_price` >= 0 AND `ad_price` <= 300

这部分显示了基于添加这些家伙的不同结果:“”

>= 0 AND `ad_price` <= 300

如果我说&gt;= 0 AND `ad_price` &lt;= 300

数据返回 0 到 30 之间的任何值,但如果我说 &gt;= "0" AND `ad_price` &lt;= "300" 它会得到高达 10,000 和 2000 等的数字。为什么?

这是我完全准备好的 PHP 语句(我知道它们被视为字符串,但如果它在准备好的语句中,我该如何更改):

$query = "SELECT * FROM `posts` WHERE `ad_title` LIKE CONCAT('%',?,'%') AND `ad_brand` 
LIKE CONCAT('%',?,'%') AND `ad_price` >= ? AND `ad_price` <= ?"; 
$get_posts = $conn_posts->prepare($query);
$get_posts->bind_param("ssss", $title, $brand, $min_range, $max_range);

【问题讨论】:

  • 如果将数字放在引号中,它们将被视为字符串而不是数字。字符串比较与数字比较的工作方式不同。显然我们看不到表模式或示例数据,但这正是我所期望的。附:这个好像和PHP没关系吧?
  • @ADyson 因为我需要它来进行搜索
  • @ADyson 对不起,我会删除你的权利我不小心添加的 php 标签。
  • 除了现在您向我们展示了一些 PHP 代码...如果相关,请将其编辑到您的问题(不是 cmets)中
  • @ADyson 好的,我会把它添加到我的帖子中

标签: php mysql mysqli


【解决方案1】:

"ssss" 告诉 mysql 将所有输入值视为字符串。将i 用于您希望被视为数字的参数。

例如

"ssii"

在你的情况下。

这在手册中有记录:https://www.php.net/manual/en/mysqli-stmt.bind-param.php

【讨论】:

  • 这并不能解释为什么ad_price 被视为字符串。我的猜测是它实际上是一个 VARCHAR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
相关资源
最近更新 更多