MariaDB не выполняет «Выполнить вставку в процедуре» - PullRequest
0 голосов
/ 08 декабря 2018

Я использую MySQL - фактически MariaDB из PHPMyAdmin- и пытаюсь написать вставку внутри хранимой процедуры, и по понятным причинам (из соображений безопасности) это не разрешено.

Я пытался изменить разрешения с помощью GRANT.ВЫПОЛНЕНИЕ ПО ПРОЦЕДУРЕ.

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

Я действительно наткнулся здесь на стену, есть идеи?

edit:

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 ;

ps это не производственный проект,просто весело, поэтому мне действительно наплевать на безопасность.

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете создать вставку с вашими переменными.Нет необходимости создавать волшебную строку.Здесь вы получите другой пример другого вопроса стекопотока :

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 ;
...