Вызов php-файла с помощью mysql trigger

Я пытаюсь вызвать .php, используя mysql trigger.This – это код mysql

delimiter $$ DROP TRIGGER IF EXISTS qwertyuiop$$ CREATE TRIGGER qwertyuiop AFTER UPDATE ON testing FOR EACH ROW BEGIN DECLARE cmd CHAR(255); DECLARE result int(10); SET cmd=CONCAT('C:/wamp/www/index.php'); SET result = sys_exec(cmd); END @@ Delimiter; 

заранее спасибо

Даже если это технически возможно с помощью библиотеки lib_mysqludf_sys вы не должны этого делать . Это неправильно во всех возможных отношениях. Чтобы упомянуть лишь некоторые из них:

  1. Использование этих UDF само по себе является огромной угрозой безопасности. Вот короткая цитата из документации lib:

    Будьте очень осторожны при принятии решения о необходимости этой функции. UDF доступны для всех пользователей базы данных – вы не можете предоставлять им привилегии EXECUTE. Поскольку командная строка, переданная в sys_exec, может делать почти все, что подвергает функцию очень реальную угрозу безопасности . Даже для доброкачественного пользователя можно случайно нанести большой урон. Вызов будет выполнен с привилегиями пользователя os, который запускает MySQL, поэтому вполне возможно удалить каталог данных MySQL или, что еще хуже.

  2. Неправильные операции без транзакций в триггере. Изменения данных, сделанные оператором DML (в вашем случае это обновление), могут быть и будут откатываться в реальном мире. Вы не сможете отменить звонки на ваш php-скрипт.

  3. Вы продлеваете время для транзакции обновления, что может вызвать зависание-ожидания-тайм-ауты для других операций обновления / вставки.

Рекомендуемое чтение:

  • Проблема с триггерами

Теперь, даже если мы отложим все упомянутое выше, у вас есть несколько проблем с кодом

  1. Вы меняете DELIMITER на $$ а затем завершаете определение триггера с помощью @@ .
  2. Нет необходимости в переменной cmd .
  3. Триггер выполняется в контексте пользователя ОС, в котором работает MySQL, поэтому вы должны предоставить абсолютные пути как для исполняемого файла php, так и для php-скрипта

При этом рабочая версия может выглядеть так:

 DELIMITER $$ CREATE TRIGGER qwertyuiop AFTER UPDATE ON testing FOR EACH ROW BEGIN DECLARE result INT; SET result = sys_exec('C:/php/php.exe C:/path/to/script.php'); END$$ DELIMITER ;