修改 按要求提供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行。
希望它有意义。
答案 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;