2013-07-23 72 views
0

我有這樣的下面的SQL代碼:SQL和MySQL的保留字

$sql = "INSERT INTO data (Artist, Name) VALUES ('TF2', 'you're right behind me')"; 

代碼本身看起來正常,但由於某種原因,MySQL不希望我可以保存它。我得到以下錯誤:

"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 're right behind me')' at line 1" 

我知道這個問題是因爲「權利」在MySQL中被保留下來,但我需要把它保存那麼應該如何我的代碼的樣子。所有幫助表示讚賞

+1

我相信這是因爲你在我的身後多了一個單一的「你就在我身後」。也許你可以通過使用反斜槓來逃避它? – JunM

+0

你需要跳過你的逗號。例如,使用'你'。有一個函數叫做'addslashes'。請參閱關於此問題的PHP手冊http://php.net/manual/en/function.addslashes.php –

+1

這是參數化查詢的一個很好的參數 – Orangepill

回答

0

由於@Fred和@JunM已經評論說,你有兩個問題。首先是名稱是一個保留字。第二個是你在單引號字符串中有單引號。將你的SQL更改爲:

$sql = "INSERT INTO data (`Artist`, `Name`) VALUES ('TF2', 'you\'re right behind me')"; 
+1

這適用於這個特殊的exempel,但是這個名字是用戶提交的,並且有時會不同,有沒有任何permament解決方案? –

+0

@AmandaWood http://php.net/manual/en/function.addslashes.php –

+0

@Fred謝謝。 :) –

0

你的問題是因爲你有一個'在工作you're。所以你的字符串在你的句子早期就結束了。使用you\'re,而不是逃脫字符'

$sql = "INSERT INTO data ('Artist', 'Name') VALUES ('TF2', 'you\'re right behind me')"; 
0

我對MySQL的使用經驗有限,但我廣泛使用SQL Server。對我來說,問題似乎在於「你就在我身後」中使用的上帝之言。在SQL Server中,我不得不使用雙apostrophy,所以SQL指令將是這樣的(請注意在該特殊照顧雙apostrophy):

$sql = "INSERT INTO data (Artist, Name) VALUES ('TF2', 'you''re right behind me')"; 

希望這有助於。 Regards

+0

這是錯誤的,你必須逃脫''與' – ObieMD5

+0

感謝您的澄清@ ObieMD5。我在SQL Server中使用雙引號。問候 – aplon

+2

參數化查詢的另一個參數...轉義是以數據庫特定的方式完成的。 – Orangepill