2013-10-08 67 views
0

我知道這很簡單,但它真的很煩人,基本的SQL語法,甲基苯丙胺,PHP和MySQL

爲什麼這項工作:

$query = $pdo->prepare('SELECT index FROM active_notifications WHERE direction = ">"'); 

和這個作品:

$query = $pdo->prepare('SELECT trigger_price FROM active_notifications WHERE direction = ">"'); 

但這不會!:

$query = $pdo->prepare('SELECT trigger_price, index FROM active_notifications WHERE direction = ">"'); 

我得到這個垃圾:

無法連接到數據庫。原因:帶消息「SQLSTATE [42000]」的異常「PDOException」:語法錯誤或訪問衝突:1064您的SQL語法錯誤;

+2

索引是一個保留字,所以我有點驚訝,第一個作品http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html – Strawberry

+0

,但它讓我選擇報表一中的索引欄? – Woodstock

+2

''SELECT'index',trigger_price''應該可以工作,但是將字段重命名爲不是保留字的東西可能會更好。 –

回答

2

你不應該使用像'index'這樣的保留字作爲你的列名(或者表,模式,或者任何需要標識符的東西)。

很可能,您的數據庫能夠從第一個語句的上下文中推斷'index'作爲列的名稱,但選擇多個列會導致它不明確。

無論如何,這不是真正的問題。你不想使用像'index'這樣的保留字作爲標識符,否則會發生奇怪的事情。嘗試更改列的名稱。

0

你可以參考到MySQL通過與逃避他們'在你的SQL語句,即:

SELECT trigger_price, 
`index` 
FROM active_notifications 
WHERE direction = ">" 

閱讀MySQL docs更多的保留字。

+0

這是一種可能性,但依賴於平臺。這不一定適用於不同的數據庫引擎。最好只使用好的命名實踐。 –