PDO插入不工作,没有出现任何错误?

时间:2014-06-26 23:47:21

标签: php mysql pdo

我一直试图让一个简单的插入工作,我不明白为什么它不起作用。该表有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 )

1 个答案:

答案 0 :(得分: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)");