2014-06-26 40 views
1

我一直在試圖讓一個簡單的插入工作,我不明白爲什麼它不工作。該表有1行,並能夠使用選擇獲取數據,但是當我插入什麼都沒有發生。沒有引發PHP錯誤,但是拋出了一個pdo錯誤,但我仍然無法看到問題出在哪裏。這裏是代碼PDO插入不能正常工作並且沒有提供任何錯誤?

$Src = "asd"; 
$Title = "imgasd"; 
$Table = "asd"; 
$TableRow = 123; 
$External = 0; 
$Type = "image"; 
$Thumb = "asd"; 
$Summery = "asd"; 

$stmt = $db->prepare("INSERT INTO Media (Title, Summery, Src, Table, TableRow, External, Type, Thumb) VALUES (:Title, :Summery, :Src, :Table, :TableRow, :External, :Type, :Thumb)"); 
$stmt->execute(array(':Title' => $Title, ':Summery' => $Summery, ':Src' => $Src, ':Table' => $Table, ':TableRow' => $TableRow, ':External' => $External, ':Type' => $Type, ':Thumb' => $Thumb)) or die(print_r($stmt->errorInfo(), true)); 

上面的代碼不會拋出php錯誤,但在瀏覽器中返回以下內容。我不知道如果我表現的一個令人難以置信的愚蠢的錯誤或者是什麼,但我不能得到這個工作

Array ([0] => 42000 [1] => 1064 [2] => 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 'Table, TableRow, External, Type, Thumb) VALUES ('imgasd', 'asd', 'asd', 'asd', '' at line 1) 

回答

4

Tablereserved word in MySQL。最佳實踐會告訴您不要將它們用作列名稱,但是如果您將它們包裝在反標中,則可以使用這些名稱。從手冊:

標識符可能被引用或不引用。如果標識符包含特殊字符或是保留字,則只要引用標識符就必須引用該標識符。 (例外:遵循一個合格的名字一個時期必須是一個標識符的保留字,所以它不需要被引用。)

這應該工作:

$stmt = $db->prepare("INSERT INTO Media (`Title`, `Summery`, `Src`, `Table`, `TableRow`, `External`, `Type`, `Thumb`) VALUES (:Title, :Summery, :Src, :Table, :TableRow, :External, :Type, :Thumb)"); 
+0

旁註:「綜述」是拼寫錯誤,但它在任何地方都是一致的,所以它不會導致任何技術問題 –

+0

修復它!我有一種感覺,這可能是src,這是一個保留字,但我從來沒有檢查過表。我在這花了2個小時,非常感謝您的幫助! –

+0

不用擔心 - 我認爲在表格和列名周圍放置滴答滴答聲將是一個很好的習慣。 –

相關問題