私はこの手順を持っています(それが何をするのかをあまり気にしないでください、「Modify 1,2,3,4」という名前のコメントを目指してください)
/* PROCEDURE 1 : Post notification */
DROP PROCEDURE IF EXISTS AddNotificationOnPosts;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `AddNotificationOnPosts`(arg_from_user INT(11),arg_on_post_id INT(11),arg_in_group_id INT(11))
BEGIN
DECLARE num_rows INT DEFAULT NULL;
DECLARE insert_result INT DEFAULT NULL;
DECLARE user_id INT DEFAULT NULL;
DECLARE done INT DEFAULT 0;
DECLARE var_user_id INT DEFAULT NULL;
DECLARE c1 CURSOR FOR
SELECT user_id
FROM user_rights
WHERE user_rights.right = 101 AND user_rights.group_id = arg_in_group_id
ORDER BY user_id DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
IF(arg_from_user IS NULL OR arg_from_user = '')
THEN
SELECT "0" AS response;
ELSEIF(arg_on_post_id IS NULL OR arg_on_post_id = '')
THEN
SELECT "0" AS response;
ELSEIF(arg_in_group_id IS NULL OR arg_in_group_id = '')
THEN
SELECT "0" AS response;
ELSE
SELECT count(notification_id) FROM notifications_posts
WHERE
from_user = arg_from_user AND
on_post_id = arg_on_post_id AND
in_group_id = arg_in_group_id
INTO num_rows;
/* MODIFY 1*/
UPDATE user_info SET notifications = 1 WHERE user_id = 145;
END IF;
IF num_rows = 0
THEN
INSERT INTO notifications_posts(from_user,on_post_id,in_group_id) VALUES(arg_from_user,arg_on_post_id,arg_in_group_id);
SELECT ROW_COUNT() INTO insert_result;
/* MODIFY 2*/
UPDATE user_info SET notifications = 1 WHERE user_id = 1;
IF insert_result > 0
THEN
/* MODIFY 3*/
UPDATE user_info SET notifications = 1 WHERE user_id = 5;
/* Increment the notifications for every user*/
OPEN c1;
read_loop: LOOP
FETCH c1 INTO var_user_id;
IF done THEN
LEAVE read_loop;
ELSE
/* MODIFY 4*/
UPDATE user_info SET notifications = 1 WHERE user_id = 1;
END IF;
END LOOP;
CLOSE c1;
SELECT "1" AS response;
ELSE
SELECT "0" AS response;
END IF;
ELSE
SELECT "0" AS response;
END IF;
END $$
DELIMITER ;
行を除いて、これは問題なく機能します
UPDATE user_info SET notifications = 1 WHERE user_id = 1;
機能しませんが、単純なプレーン SQL(phpmyadmin) では、このクエリは正常に機能しています。何が問題ですか?
このスクリプトは何をしますか? 特定のユーザーに通知を投稿できるようにするのに役立ちます.group1に何かを投稿すると、そのグループでright101を持つすべてのユーザーに次のように通知する必要があります
UPDATE user_info SET notifications = notifications + 1 WHERE user_id = var_user_id;
FOR LOOP
PHPで使用していたのと同じようにカーソルを使用する
これの何が問題なのですか?プロシージャはデータを更新できませんか?! 私が自分自身を理解できるようにしたことを願っています。