我一直在建立一个论坛或博客,如果你愿意为我的PHP和MySQL的网络组合。我对PHP相当不错,但MySQL一直是我的问题,因为在此之前我从来没有理由使用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。接下来的三个插入到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;
查看本问题解答http://stackoverflow.com/q/9974325/1415724和mysql.com网站上的相关链接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,更不像编程语言。 –
不客气杰夫。 –