【发布时间】:2013-02-28 23:44:14
【问题描述】:
我正在创建一个数据库设置脚本,它可以即时创建和设置数据库。我使用的 mysql 用户具有创建存储过程的完全权限。我的数据库服务器与我的应用程序服务器不同。
我能够创建用户,然后是数据库,然后选择数据库,然后创建表,然后将一些数据插入表中,然后创建视图等。但最后,当我创建存储过程时,我遇到了问题。
按照sql创建过程
CREATE DEFINER=`newuser`@`192.168.0.10` PROCEDURE `AppCounts_Stagewise_Monthly_Weekly` (IN FILTERTYPE INTEGER)
BEGIN
IF(FILTERTYPE = 0) THEN
SELECT base_user_id, stage, COUNT(vw_application.id) AS app_counts, WEEK(DATE) AS `week`, YEAR(DATE) AS `year`
FROM vw_application
WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= DATE(DATE)
AND DATE(DATE) <= CURDATE() GROUP BY vw_application.stage, base_user_id;
ELSE
SELECT base_user_id, stage, COUNT(vw_application.id) AS app_counts, MONTH(DATE) AS `month`, YEAR(DATE) AS `year`
FROM vw_application
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= DATE(DATE) AND DATE(DATE) <= CURDATE() GROUP BY vw_application.stage, base_user_id;
END IF;
END;
上面的create procedures SQL 用一个特殊的分隔符分隔并放在一个文件中。我打开文件并通过分隔符分解每个创建脚本以获取数组中的每个创建语句并使用 zend db 适配器执行它们。
$data = file_get_contents($this->_specimenDbFiles['ROUTINES']);
$data = explode('--', $data);
foreach($data as $key => $value) {
$clientDbAdaptor->query($value);
}
【问题讨论】:
-
问题是什么?如果文件是纯 SQL 为什么不直接使用命令行工具?
-
你有什么问题?您面临哪些问题?
-
我的数据库服务器不同,问题是每次我收到以下错误致命错误:未捕获异常 'PDOException' 并带有消息'SQLSTATE [HY000]:一般错误:1548 无法从 mysql.proc 加载。该表可能已损坏'
标签: php mysql procedures