使用“show”作为字段名称时尝试插入行的语法错误

时间:2013-03-11 04:25:10

标签: php mysql prepared-statement

我有一张桌子:

up_rel

> |--id--|--uid--|--pid--|--show--|

我正在做这个插入序列:

 $icat_sth = $dbh->prepare("INSERT INTO product_category (name, parent) VALUES(:name, :parent)");
    $icat_sth->bindParam(':name', $post['cat_name']);
    $icat_sth->bindParam(':parent', $post['parent_category']);
    $icat_sth->execute();
    $pid = $dbh->lastInsertId();

    $rel_sth = $dbh->prepare("INSERT INTO up_rel (uid, pid, show) VALUES(:uid, :pid, :show)");
    $rel_sth->bindParam(':uid', $uid);
    $rel_sth->bindParam(':pid', $pid);
    $rel_sth->bindParam(':show', '1');
    $rel_sth->execute();
    echo $dbh->lastInsertId();

首次插入到产品类别会顺利但下一个插入会返回错误:

  

1064您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'show)VALUES(?,?,?)'在第1行

如果我从插入中移除show,则可以正常工作。

我尝试将其中的一个放入值(:uid, :pid, 1) 在绑定中我引用了它而不是。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:7)

Show是MySQL中的保留字,所以我认为这是你看到的错误:http://dev.mysql.com/doc/refman/5.0/en/show.html

Per @Burhan Khalid的贡献(如果你不能重命名该字段,这是一个很好的选择):

  

要逃避保留字,请使用返回标记``。

@newfurniturey对保留字有更有用的参考:

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html