0

私はテーブルを持っています:

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 サーバーのバージョンに対応するマニュアルで、1 行目の「show) VALUES(?, ?, ?)」付近で使用する正しい構文を確認してください。

挿入からショーを削除すると機能します。

私はそれを値に入れよう(:uid, :pid, 1) としましたが、バインドではそれを引用しましたが、引用しませんでした。

足りないものはありますか?

4

1 に答える 1

7

ShowはMySQLの予約語なので、あなたが見ているエラーだと思います: http://dev.mysql.com/doc/refman/5.0/en/show.html

@Burhan Khalid の貢献による (フィールドの名前を変更できない場合は、これが適切なオプションです):

予約語をエスケープするには、バック ティック `` を使用します。

また、@newfurniturey には、予約語に関するより便利なリファレンスがあります。

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

于 2013-03-11T04:30:28.213 に答える