Проблема: у меня есть таблица, которая содержит определенные записи. После того, как вставка сделана, я хочу вызвать внешнюю программу (скрипт php) через sys_ * UDF MySQL.
Теперь проблема - триггер, который у меня есть, передает идентификатор записи в скрипт.
Когда я пытаюсь извлечь данные через скрипт, я получаю 0 строк.
Во время моего собственного тестирования я пришел к выводу, что триггер вызывает скрипт php и передает параметры ДО фактической вставки, поэтому я не получаю записей для данного идентификатора.
Я тестировал это на MySQL 5.0.75 и 5.1.41 (ОС Ubuntu).
Я могу подтвердить, что параметры передаются в скрипт до фактической вставки, потому что я добавил sleep (2); на мой PHP-скрипт, и я получил данные правильно.
Без сна(); Заявление, я получаю 0 записей для данного идентификатора.
Мой вопрос - как решить эту проблему без необходимости жестко задавать какую-то задержку в скрипте php?
У меня нет свободы предполагать, что 2 секунды (или 10 секунд) будут достаточной задержкой, поэтому я хочу, чтобы все происходило «естественно», когда одна команда завершается - другая выполняется.
Я предполагал, что если триггер имеет тип AFTER INSERT, все в теле триггера будет выполнено после того, как MySQL фактически вставит данные.
Таблица раскладки:
CREATE TABLE test (
id int not null auto_increment PRIMARY KEY,
random_data varchar(255) not null
);
Схема запуска:
DELIMITER $$
CREATE TRIGGER `test_after_insert` AFTER INSERT ON `test`
FOR EACH ROW BEGIN
SET @exec_var = sys_exec(CONCAT('php /var/www/xyz/servers/dispatcher.php ', NEW.id));
END;
$$
DELIMITER ;
Отказ от ответственности: я знаю проблемы безопасности при использовании функции sys_exec, моя проблема в том, что MySQL не вставляет FIRST, а затем вызывает скрипт с необходимыми параметрами.
Если кто-то может пролить некоторый свет на то, как это исправить, или использует другой подход, который не включает SELECT INTO OUTFILE и использование FAM - я был бы очень признателен. Заранее спасибо.