2014-01-07 45 views
0

編輯 提供的要求是這裏的日期欄的外觀: 2014年1月15日 2014年1月16日 2014年8月10日phpAdmin顯示行,MySQL語句不行?

所以我想實現,是提取包含每一行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 '日期' LIKE '揚%2014'

原來的問題

我在這裏有一個很奇怪的問題。 如果我使用由我託管網站提供phpAdmin搜索,並搜索就像一個特定日期的行,讓人想起了這條SQL語句,並發現3行:

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

但是,當我嘗試要麼使用phpAdmin中的SQL語句,要麼使用我自己的代碼來做同樣的事情,它顯示什麼都沒有?怎麼來的?這是100%的相同的聲明。真的不明白我怎麼可以使用內置的phpAdmin函數進行搜索,然後它生成該SQL語句,然後當我嘗試自己注入它時,它只返回0行而不是3.

希望它說得通。

+0

不揚%2014使用'%Jan-2014%' –

+6

「日期」列中存儲了什麼?它的類型是什麼,以及那裏的實際數據的例子是什麼? –

+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; 
+0

Wauw,謝謝你的一個人。我永遠不會自己拿到那個。真的是非常好的答案,有很好的解釋和進一步研究的鏈接+如何糾正我的代碼。我無法要求更多!感謝大家的回答,並指導我在正確的方向上獲得更多有關該主題的知識。 – Seerex