【问题标题】:phpAdmin shows rows, MySQL statement doesn't?phpmyAdmin 显示行,MySQL 语句不显示?
【发布时间】:2014-01-07 15:41:19
【问题描述】:

编辑 根据要求提供的是日期列的外观: 2014 年 1 月 15 日 2014 年 1 月 16 日 2014 年 8 月 10 日

所以我想要实现的是提取包含 2014 年 1 月的每一行,所以我得到了那一年该月的每一行。

这是我生成查询的 PHP 代码:

    $monthYearString = $month . "%" . $year;
$query_current = "SELECT * FROM {$table_omsaetning} WHERE 'Date' LIKE " . "'{$monthYearString}'";
echo $query_current;

回显给了我这个查询:SELECT * FROM table_name_here WHERE 'Date' LIKE 'Jan%2014'

原始问题

我有一个非常奇怪的问题。 如果我使用我的托管站点提供的 phpAdmin 执行搜索,并搜索类似于某个日期的行,它会联想到这个 SQL 语句,它会找到 3 行:

SELECT * 
FROM  `table_name` 
WHERE  `Date` LIKE  'Jan%2014'

但是,当我尝试使用 phpAdmin 中的 SQL 语句或我自己的代码做同样的事情时,它什么也没显示?怎么来的?这是100%相同的声明。真的不明白我怎么能用内置的phpAdmin函数搜索,然后它生成那个SQL语句,然后当我尝试自己注入它时,它只返回0行而不是3。

希望它有意义。

【问题讨论】:

  • 不是 Jan%2014。使用%Jan-2014%
  • Date 列中究竟存储了什么?它的类型是什么,那里的实际数据有哪些示例?
  • @Seerex 你能发布你的表的架构吗?
  • 你能把生成这个查询的 PHP 代码贴出来并阅读结果吗
  • 发布了日期列信息和我的 php 代码。谢谢大家

标签: php mysql sql sql-server


【解决方案1】:

单引号和反引号之间的区别在这里很重要。您引用了列名而不是使用反引号。应该是:

SELECT * FROM table_name_here WHERE `Date` LIKE 'Jan%2014'

反引号字符(参见上面查询中的Date 列)允许您指示它是名称而不是字符串。在这种情况下,如果你没有这些,你会得到一个错误,因为Date 是一个保留字。反引号允许您对表名和列名使用保留字。

单引号表示它是一个字符串。对于您的查询,您实际上是在搜索字符串 'Date' 包含字符串 'January 2014' 的任何记录,这是不可能的,并且将始终返回零结果。

有关更多信息,请查看此 SO 问题:When to use single quotes, double quotes, and backticks in MySQL

您的代码应如下所示:

$monthYearString = $month . "%" . $year;
$query_current = "SELECT * FROM {$table_omsaetning} WHERE `Date` LIKE '{$monthYearString}'";
echo $query_current;

【讨论】:

  • 哇,非常感谢。我永远不会自己得到那个。真的很好的答案,有很好的解释和进一步研究的链接+如何更正我的代码。我不能要求更多!非常感谢您的回答,并引导我朝着正确的方向了解有关该主题的更多知识。
猜你喜欢
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2012-05-26
  • 2012-09-15
相关资源
最近更新 更多