phpmyAdmin显示行,MySQL语句没有?

时间:2014-01-07 15:41:20

标签: php mysql sql sql-server

修改 按要求提供Date列的外观: 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语句或我自己的代码做同样的事情时,它显示NOTHING?怎么会?它是100%相同的声明。真的无法理解我如何使用内置的phpAdmin函数进行搜索,然后它会生成那个SQL语句,然后当我尝试自己注入它时,它只返回0行而不是3行。

希望它有意义。

1 个答案:

答案 0 :(得分:2)

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

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;