在PhpMyAdmin

时间:2017-03-13 15:49:29

标签: php mysql stored-procedures

这是计算所有表并将结果存储在临时表中的过程:

DELIMITER $$
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `COUNT_ALL`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE TNAME CHAR(255);
DECLARE table_names CURSOR for 
    SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE();
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN table_names;   
DROP TABLE IF EXISTS TCOUNTS;
CREATE TEMPORARY TABLE TCOUNTS 
  (
    TABLE_NAME CHAR(255),
    RECORD_COUNT INT
  ) ENGINE = MEMORY; 
WHILE done = 0 DO
  FETCH NEXT FROM table_names INTO TNAME;
   IF done = 0 THEN
    SET @SQL_TXT = CONCAT("INSERT INTO TCOUNTS(SELECT '" , TNAME  , "' AS TABLE_NAME, COUNT(*) AS RECORD_COUNT FROM ", TNAME, ")");
    PREPARE stmt_name FROM @SQL_TXT;
    EXECUTE stmt_name;
    DEALLOCATE PREPARE stmt_name;  
  END IF;
END WHILE;
CLOSE table_names;
SELECT * FROM TCOUNTS;
SELECT SUM(RECORD_COUNT) AS TOTAL_DATABASE_RECORD_CT FROM TCOUNTS;
END
$$

在mysql>中工作正常终端,所以我可以使用CALL COUNT_ALL语句,过了一段时间我打印了带有结果的表。

任何人都可以帮助如何在PhpMyAdmin中存储此特定程序吗?我正在努力学习文档,我看不到明确的解释,只有几篇文章描述了简单的程序创建,但没有这么复杂的解决方案...

PhpMyAdmin不希望授予对此过程的访问权限,它会在INVOKER / DEFINER字段中生成cPanel会话令牌,并且在注销和登录后再次失去过程。它不适用于root,database_root,database_user,cpanel_user,我已尝试过每个帐户。它适用于临时cPanel会话,例如仅由DEFINER字段中的phpMyAdmin插入的cpses_adyCcgNvgZ @ localhost。否则我有一个信息: MySQL说:#1227 - 访问被拒绝;您需要(至少一个)此操作的SUPER权限

服务器在带有WHM和CPanel的Centos7系统上,我拥有所有root权限。

所以问题是如何将此过程永久存储在phpMyAdmin中并删除此消息?

===========

最终解决了,也许对其他人有帮助。

WHM存在问题。当您登录WHM然后从WHM登录cPanel帐户并输入phpMyAdmin时,您将被识别为session_user @ localhost,然后您只能在会话中创建和执行过程。存储过程和函数,但不能使用不同的会话令牌访问。

要避免此类行为,您应该直接登录cPanel,这样phpMyAdmin就能正确识别您,并且数据库中的每个过程都将INVOKER / DEFINER字段设置为you_cpanel_login @ localhost。因此,每个程序/功能都是完全可访问的。

希望对某人有所帮助。

0 个答案:

没有答案