【发布时间】:2017-02-17 17:20:33
【问题描述】:
如果您愿意的话,我一直在为我的 PHP 和 MySQL 网络组合建立一个论坛或博客。我对 PHP 很满意,但 MySQL 对我来说一直是个问题,因为在此之前我从来没有理由使用 MySQL 或任何数据库,不是 MySQL 错误消息是我见过的最糟糕的错误消息。这是我试图用于向论坛/博客添加新帖子的查询。
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;
【问题讨论】:
-
非常感谢。我只是意识到声明关键字还有很多。我虽然它只是一个用于在事务中声明变量的关键字,但我离得很远,而且还有很多。我一直在看 sql 都错了,看到它更像 dos 而不像编程语言。
-
不客气,杰夫。