2013-03-13 2 views
0

Я создаю скрипт настройки базы данных, который создает и настраивает базу данных на лету. Пользователь mysql, который я использую, имеет полный превалинг для создания хранимой процедуры. Мой сервер базы данных отличается от моего сервера приложений.Создать хранимую процедуру с PHP

Я могу создать пользователя, затем базу данных, затем выбрать базу данных, затем создать таблицы, затем вставить некоторые данные в таблицы, затем создать представления и т. Д. Но наконец, когда я создаю хранимые процедуры, я сталкиваюсь с проблемами.

После 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 procedure сек SQLs как выше отделены друг от друга специальным разделителем и поместить в файл. Я открываю файл и взорву каждый сценарий создания разделителем, чтобы получить каждый оператор create в массиве и выполнить их с помощью адаптера zend db.

$data = file_get_contents($this->_specimenDbFiles['ROUTINES']); 
$data = explode('--', $data); 

foreach($data as $key => $value) { 
    $clientDbAdaptor->query($value); 
} 
+0

И проблема в том, что проблема? Если файл является чистым SQL, почему бы просто не использовать инструмент командной строки? –

+0

В чем вы сомневаетесь? С какими проблемами вы столкнулись? – hakre

+0

мой сервер базы данных отличается, проблема в том, что каждый раз я получаю следующую ошибку. Неустранимая ошибка: исключение исключения «PDOException» с сообщением «SQLSTATE [HY000]: общая ошибка: 1548 Не удается загрузить из mysql.proc. Возможно, таблица повреждена " –

ответ

2

Мне просто удалось получить эту работу.

В основном, что я сделал, запускается на моем сервере базы данных, и ошибка была решена.

mysql_upgrade -u root -p 
Смежные вопросы