복붙노트

MySQL 트리거에서 PHP 스크립트 호출하기

PHP

MySQL 트리거에서 PHP 스크립트 호출하기

레코드가 MySQL 데이터베이스 테이블에 삽입 될 때 PHP 페이지 / 함수를 호출하는 방법이 있습니까? 우리는 레코드 삽입 절차를 제어 할 수 없습니다. PHP 스크립트를 다시 호출 할 수있는 트리거 메커니즘이 있습니까?

해결법

  1. ==============================

    1.트리거는 PHP 서버가 아닌 MySQL 서버에서 실행됩니다 (둘 다 동일한 시스템에 있더라도).

    트리거는 PHP 서버가 아닌 MySQL 서버에서 실행됩니다 (둘 다 동일한 시스템에 있더라도).

    따라서, 나는 이것이 가능하지 않다는 것을 말할 것입니다 - 적어도 간단하지는 않습니다.

    여전히, MySQL FAQ에서이 항목을 고려하면 트리거 :

    따라서 PHP 실행 파일 / 스크립트를 시작하는 UDF 함수를 통한 방법이있을 수 있습니다. 그렇게 쉬운 일은 아니지만 가능한 것 같습니다. ;-)

  2. ==============================

    2.친구와 저는 Bernardo Damele의 sys_eval UDF를 호출하는 방법을 알아 냈습니다. 그러나 해결책은 내가 원하는만큼 우아하지 않습니다. 여기에 우리가 한 일이 있습니다.

    친구와 저는 Bernardo Damele의 sys_eval UDF를 호출하는 방법을 알아 냈습니다. 그러나 해결책은 내가 원하는만큼 우아하지 않습니다. 여기에 우리가 한 일이 있습니다.

    저장 프로 시저 코드 :

    DELIMITER $$
    CREATE PROCEDURE udfwrapper_sp
    (p1   DOUBLE,
     p2   DOUBLE,
     p3 BIGINT)
    BEGIN
     DECLARE cmd CHAR(255);
     DECLARE result CHAR(255);
     SET cmd = CONCAT('C:/xampp/php/php.exe -f "C:/xampp/htdocs/phpFile.php" ', p1, ' ', p2, ' ', p3);
     SET result = sys_eval(cmd);
    END$$;
    

    트리거 코드 :

    CREATE TRIGGER udfwrapper_trigger AFTER INSERT ON sometable
    FOR EACH ROW
    CALL udfwrapper_sp(NEW.Column1, NEW.Column2, NEW.Column3);
    

    스토어드 프로 시저를 가지고있는 것에 대해 기쁘지는 않습니다. 추가 오버 헤드가 발생하는지는 모르지만 작동합니다. 행이 sometable에 추가 될 때마다 트리거가 시작됩니다.

  3. ==============================

    3.데이터베이스 트리거에서 PHP 코드를 호출하는 것은 매우 나쁜 프로그래밍 방법으로 간주되어야합니다. "미친"트릭을 사용하여 해결하려는 작업에 대해 설명하면 만족스러운 솔루션을 제공 할 수 있습니다.

    데이터베이스 트리거에서 PHP 코드를 호출하는 것은 매우 나쁜 프로그래밍 방법으로 간주되어야합니다. "미친"트릭을 사용하여 해결하려는 작업에 대해 설명하면 만족스러운 솔루션을 제공 할 수 있습니다.

    추가 19.03.2014 :

    나는 어떤 추론을 더 일찍 추가해야했는데, 지금이 일을 할 시간을 찾았습니다. 중요한 언급을 위해 @cmc에게 감사드립니다. 따라서 PHP 트리거는 애플리케이션에 다음과 같은 복잡성을 추가합니다.

  4. ==============================

    4.나는 이것을 찾았다:

    나는 이것을 찾았다:

    http://forums.mysql.com/read.php?99,170973,257815#msg-257815

    DELIMITER $$
    CREATE TRIGGER tg1 AFTER INSERT ON `test`
    FOR EACH ROW
    BEGIN
    \! echo "php /foo.php" >> /tmp/yourlog.txt
    END $$
    DELIMITER ;
    
  5. ==============================

    5.나는 PHP 스크립트가 db를 지속적으로 폴링하지 않아야하는 긴 폴링을 가진 경우에 대해이 정확한 문제를 생각하고있었습니다. 폴링은 어딘가에서 수행해야하며 메모리가 가장 좋을 것입니다. 따라서 어떻게 든 트리거가 memcache와 같은 정보에 정보를 넣을 수 있다면 php는 전체적으로 훨씬 덜 집중적 인 폴링을 할 수 있습니다. mysql이 memcache를 사용하는 방법이 필요하다. 아마도 특정 사용자 ID가있는 미리 정의 된 변수에 입력하십시오. 데이터가 검색되면 PHP는 db가 다시 설정할 때까지 var를 재설정 할 수 있습니다. 타이밍 문제에 대한 확신이 없습니다. 아마도 이전에 선택된 키를 저장하는 두 번째 변수 일 것입니다.

    나는 PHP 스크립트가 db를 지속적으로 폴링하지 않아야하는 긴 폴링을 가진 경우에 대해이 정확한 문제를 생각하고있었습니다. 폴링은 어딘가에서 수행해야하며 메모리가 가장 좋을 것입니다. 따라서 어떻게 든 트리거가 memcache와 같은 정보에 정보를 넣을 수 있다면 php는 전체적으로 훨씬 덜 집중적 인 폴링을 할 수 있습니다. mysql이 memcache를 사용하는 방법이 필요하다. 아마도 특정 사용자 ID가있는 미리 정의 된 변수에 입력하십시오. 데이터가 검색되면 PHP는 db가 다시 설정할 때까지 var를 재설정 할 수 있습니다. 타이밍 문제에 대한 확신이 없습니다. 아마도 이전에 선택된 키를 저장하는 두 번째 변수 일 것입니다.

  6. ==============================

    6.MySQL에 트랜잭션 로그가있는 경우 로그 인스턴스 작성을위한 트리거를 작성할 수 있습니다. cronjob이 로그를 모니터링하고 트리거에 의해 생성 된 이벤트를 기반으로 PHP 스크립트를 호출 할 수 있습니다. 당신이 절대적으로 당신을 통제 할 수 없다면 그것은 삽입입니다.

    MySQL에 트랜잭션 로그가있는 경우 로그 인스턴스 작성을위한 트리거를 작성할 수 있습니다. cronjob이 로그를 모니터링하고 트리거에 의해 생성 된 이벤트를 기반으로 PHP 스크립트를 호출 할 수 있습니다. 당신이 절대적으로 당신을 통제 할 수 없다면 그것은 삽입입니다.

  7. ==============================

    7.데이터베이스에서 알림을 받으려면 websocket을 사용하여 매초마다 최신 업데이트 타임 스탬프를 확인하는 명령 줄 스크립트를 작성했습니다. 이것은 서버에서 무한 루프로 실행되었습니다. 변경이 있으면 연결된 모든 클라이언트에게 알림을 보낼 수 있습니다.

    데이터베이스에서 알림을 받으려면 websocket을 사용하여 매초마다 최신 업데이트 타임 스탬프를 확인하는 명령 줄 스크립트를 작성했습니다. 이것은 서버에서 무한 루프로 실행되었습니다. 변경이 있으면 연결된 모든 클라이언트에게 알림을 보낼 수 있습니다.

  8. ==============================

    8.가능한지는 모르겠지만 MySQL에서 CSV 스토리지 엔진으로이 작업을 수행 할 수 있다고 생각했습니다. 나는이 엔진의 세부 사항을 모른다 : http://dev.mysql.com/doc/refman/5.7/en/csv-storage-engine.html하지만 파일을 살펴보면 파일이 수정 된 경우 운영 체제에서 PHP 호출을 트리거하는 파일 감시자를 가질 수 있습니다 .

    가능한지는 모르겠지만 MySQL에서 CSV 스토리지 엔진으로이 작업을 수행 할 수 있다고 생각했습니다. 나는이 엔진의 세부 사항을 모른다 : http://dev.mysql.com/doc/refman/5.7/en/csv-storage-engine.html하지만 파일을 살펴보면 파일이 수정 된 경우 운영 체제에서 PHP 호출을 트리거하는 파일 감시자를 가질 수 있습니다 .

  9. ==============================

    9.cronjob이 로그를 모니터링하고 트리거에 의해 생성 된 이벤트를 기반으로 PHP 스크립트를 호출 할 수 있습니다. 만약 당신이 MySQL에 트랜잭션 로그를 가지고 있다면, 로그 인스턴스 생성을위한 트리거를 생성 할 수 있습니다.

    cronjob이 로그를 모니터링하고 트리거에 의해 생성 된 이벤트를 기반으로 PHP 스크립트를 호출 할 수 있습니다. 만약 당신이 MySQL에 트랜잭션 로그를 가지고 있다면, 로그 인스턴스 생성을위한 트리거를 생성 할 수 있습니다.

  10. ==============================

    10.가능한 한 상점 절차에서 도망 간다. 그들은 유지하기가 꽤 어렵고 매우 오래되었습니다.;)

    가능한 한 상점 절차에서 도망 간다. 그들은 유지하기가 꽤 어렵고 매우 오래되었습니다.;)

  11. from https://stackoverflow.com/questions/1467369/invoking-a-php-script-from-a-mysql-trigger by cc-by-sa and MIT license