programing

MariaDB가 절차에서 삽입 실행을 수행하지 않습니다.

megabox 2023. 9. 6. 22:00
반응형

MariaDB가 절차에서 삽입 실행을 수행하지 않습니다.

저는 MySQL - 실제로 PHPmyAdmin의 MariaDB - 를 사용하고 있으며 저장 프로시저 내부에 삽입을 작성하려고 하고 있으며 명백한 (보안) 이유로 허용되지 않습니다.

GRANT EXECUCT ON PROCEDURE 문을 사용하여 권한을 변경하려고 했습니다.

GRANT EXECUTE ON PROCEDURE test.putDataInFull TO 'root'@'localhost' 

정말 벽에 부딪혔어요. 무슨 생각 있어요?

편집:

DELIMITER //
CREATE PROCEDURE putDataInFull (IN matchid INT(11))
BEGIN
  DECLARE koula int(11);
  DECLARE c     varchar(255);
  SET @koula = matchid;
  SET @c := concat('insert into log (match_id, comment) values (?,\'inPUtDataWeTrtust\');');

  DECLARE EXIT HANDLER FOR SQLEXCEPTION
       BEGIN
         SELECT CONCAT(@c, ' is not valid');
       END;
  PREPARE stmt FROM @c;
  EXECUTE stmt USING @koula;
  DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

p.s. 이건 제작 프로젝트가 아니라 단지 재미있는 일이기 때문에 보안은 정말 신경쓰지 않습니다.

변수를 사용하여 삽입체를 만들 수 있습니다.마법 문자열을 만들 필요는 없습니다.다음은 다른 스택 오버플로 질문의 다른 예입니다.

DELIMITER $$

CREATE  PROCEDURE ADD_WITHDRAWAL_A(IN withdrawalcode_p VARCHAR(25), IN id_p VARCHAR(8), IN amount_p VARCHAR(12), IN datewithdrawn_p VARCHAR(35), IN approved_p VARCHAR(8))
BEGIN

     START TRANSACTION;

     INSERT INTO Withdrawals(WithdrawalCode, IDD, Amount, DateWithdrawn, Approved) 
     VALUES (withdrawalcode_p, id_p, amount_p, datewithdrawn_p, approved_p);

     UPDATE account SET AccountBalance = AccountBalance - amount_p WHERE IDD = id_p LIMIT 1;

     COMMIT;

END $$

DELIMITER ;

언급URL : https://stackoverflow.com/questions/53686512/mariadb-does-not-do-execute-insert-in-procedure

반응형