PHPとMySQLを使って自分のWebポートフォリオを作成する場合は、フォーラムやブログを作成しています。私はPHPでうまくいくが、MySQLはいつも私にとっては問題である。なぜなら、これまでにMySQLや他のデータベースを使用する理由がなかったからである。これは、私がフォーラム/ブログの事に新しい投稿を追加するために使用しようとしているクエリです。MySQLでDeclareを使用する
START TRANSACTION;
DECLARE postKey int;
INSERT INTO posts(post_subject, post_content, post_date, post_by)
SELECT ?, ?, NOW(), user_id FROM users WHERE user_name = ? LIMIT 1;
SET postKey = LAST_INSERT_ID();
INSERT INTO juct_tags_posts(post_key, tag_key)
SELECT postKey, tag_id FROM tags WHERE tag_name = ? LIMIT 1;
INSERT INTO juct_tags_posts(post_key, tag_key)
SELECT postKey, tag_id FROM tags WHERE tag_name = ? LIMIT 1;
INSERT INTO juct_tags_posts(post_key, tag_key)
SELECT postKey, tag_id FROM tags WHERE tag_name = ? LIMIT 1;
COMMIT;
最初の挿入はpost_dataです。次の3つの挿入は、tag_idとpost_idの接合テーブルです。問題はこれです。 Prepare failed: (1064) 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 'DECLARE postKey int;INSERT INTO posts(post_subject, post_content, post_date, pos' at line 1
私は何が問題を引き起こしているのか分かりません。また、クエリがこのような文字列にセットを準備しているときにこれが役立つ場合。
START TRANSACTION;DECLARE postKey int;INSERT INTO posts(post_subject, post_content, post_date, post_by) SELECT ?, ?, NOW(), user_id FROM users WHERE user_name = ? LIMIT 1;SET postKey = LAST_INSERT_ID();INSERT INTO juct_tags_posts(post_key, tag_key) SELECT postKey, tag_id FROM tags WHERE tag_name = ? LIMIT 1;INSERT INTO juct_tags_posts(post_key, tag_key) SELECT postKey, tag_id FROM tags WHERE tag_name = ? LIMIT 1;INSERT INTO juct_tags_posts(post_key, tag_key) SELECT postKey, tag_id FROM tags WHERE tag_name = ? LIMIT 1;COMMIT;
このQ&Aを参照してください。http://stackoverflow.com/q/9974325/1415724および関連するリンクは、mysql.comのWebサイトhttps://dev.mysql.com/doc/refman/5.7/en/commit.html - - https://dev.mysql.com/doc/refman/5.7/en/declare-handler.html –
ありがとうございました。 declareキーワードにはもっと多くのことがあると思います。私はトランザクション内の変数を宣言するために使用された単なるキーワードであったが、私は途方に暮れていました。私はSQLをすべて間違って見ていて、それはDOSのようになり、プログラミング言語に似ていません。 –
あなたは歓迎です。 –