我一直试图让一个简单的插入工作,我不明白为什么它不起作用。该表有1行,我可以使用选择获取数据,但当我插入没有任何反应。没有抛出php错误,但抛出了一个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 )
答案 0 :(得分:4)
Table
是reserved 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)");