Php 无法创建MySQL存储过程

Php 无法创建MySQL存储过程,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我正在尝试创建一个存储过程: delimiter // CREATE PROCEDURE update_counter BEGIN UPDATE bookmark bk, (SELECT count(Distinct user_bookmarks.user_id) AS bookmark_counter, bookmark_id FROM user_bookmarks LEFT JOIN bookmarks ON user_bookmarks.bookmark_id = boo

我正在尝试创建一个存储过程:

delimiter //
CREATE PROCEDURE update_counter
BEGIN 
 UPDATE bookmark bk,
 (SELECT count(Distinct user_bookmarks.user_id) AS bookmark_counter, bookmark_id 
  FROM user_bookmarks 
  LEFT JOIN bookmarks ON user_bookmarks.bookmark_id = bookmarks.id 
  GROUP BY user_bookmarks.bookmark_id 
 ) t
 set bk.counter = t.bookmark_counter
 where bk.id = t.bookmark_id
END //
但这给了我一个错误


1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在第2行“开始更新书签bk,选择countDistinct user_bookmarks.user_id AS”附近使用的正确语法有何想法?这里怎么了


您必须在标题中定义IN和OUT参数。如果没有参数,则必须添加


即使没有指定的输入和输出更新计数器,过程名称也应以结尾


您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“END//”附近使用的正确语法line@HituBansal你必须补充;其中bk.id=t.bookmark_idStill error之后:您的SQL语法中有一个错误;检查与MySQL服务器版本对应的手册,以了解第行“//”附近要使用的正确语法11@HituBansal如果你有一个错误很清楚地说MySQL?@ Rigel1121:我从你的一些问题中看到你正在设置标题的标题。案例-我认为社区已经决定这里更倾向于判决案例。若你们感兴趣的话,已经在Meta上讨论过了。它对我有用。你们能解释一下结尾吗;//你为什么使用;在EndWell之后;不需要在结束后添加,但添加并没有坏处,您可以说这是我长期以来一直在做的一个老习惯:最佳实践是您应该始终使用终止每个命令;,就像您案例中的查询一样。
delimiter //
CREATE PROCEDURE update_counter()
BEGIN 
 UPDATE bookmark bk,
 (SELECT count(Distinct user_bookmarks.user_id) AS bookmark_counter, bookmark_id 
  FROM user_bookmarks 
  LEFT JOIN bookmarks ON user_bookmarks.bookmark_id = bookmarks.id 
  GROUP BY user_bookmarks.bookmark_id 
 ) t
 set bk.counter = t.bookmark_counter
 where bk.id = t.bookmark_id;
END//

 delimiter;
delimiter //
CREATE PROCEDURE update_counter()
BEGIN 
 UPDATE bookmark bk,
 (SELECT count(Distinct user_bookmarks.user_id) AS bookmark_counter, bookmark_id 
  FROM user_bookmarks 
  LEFT JOIN bookmarks ON user_bookmarks.bookmark_id = bookmarks.id 
  GROUP BY user_bookmarks.bookmark_id 
 ) t
 set bk.counter = t.bookmark_counter
 where bk.id = t.bookmark_id;
END;//

delimiter ;