2017-01-24 3 views
0

私は、PHP-Codeigniter 2.1.3、MySQL、XAMPPを新しく使用しています。私はデータベーステーブルCustomerを持っていますが、新しい顧客がテーブルに興味を持っている間に、私はメールまたはSMSを彼の電話に送ってください。PHP/MySQLお客様へのSMSまたはメールのトリガー方法

私は次のコードを試しました:MySQLテーブルで私はcustomerテーブルでトリガを追加しました。そのトリガで、私のPHPファイルまたはCONTROLLER Pathを送信メールに割り当てたいのですが、エラーを表示しました。

BEGIN 
IF NEW.flag = 1 THEN 
    DECLARE result CHAR(255); 
    SET cmd = CONCAT('E:/xampp/php/php.exe -f "E:/xampp/htdocs/DEN/sentMail.php"'); 
END IF; 
END 

この問題を解決するにはどうすればよいですか。あなたのアイデアや親切なサポートを大いに期待しています。よろしくお願いします。

答えて

0

私はそれがそのシステムパスに対して厳密に動作しているので、良い解決策ではないと思います。

現在のプロジェクトで使用している頭の上に2つのソリューションがあります。

  1. CIについてはわかりませんが、イベント/オブザーバー/サブスクライバのパターンを使用できます。したがって、コード内で顧客が作成される場所は、CustomerCreated($customer)というイベントが発生します。その後、そのイベントでsendMailハンドラをトリガすることができます。このようにして、顧客が作成される複数のチャネルを持つことができ、sendMailハンドラを複数のイベントにもアタッチすることができます。

  2. その解決策の上で、もう1つのプラクティスが私を良くしてくれました。電子メールは完了するのが比較的遅いので、データベースにというテーブルを作成して(id, from, to, type_id, status, sent_at, to_be_sent_at)のようなテーブルを作成し、to_be_sent_at < now() and sent_at is not null(またはstatus <> whatever)のすべての電子メールを取得し、電子メールを配信するスクリプトを作成してstatusおよびsent_at 。このスクリプトをx分ごとに実行するようにcronジョブを設定できます。あなたのコードのどこにいても、このテーブルに追加するだけで、指定された時刻に電子メールが配布されることがわかります。テーブルを持っていると簡単にデバッグできます。

また、this postをご覧になり、コードが機能しない理由を確認してください。

私はこの機能を提供するmysql拡張機能があることを覚えていますが、これは良い習慣であると非常に疑います。あなたはあなたのデータベースに大きく依存するようになります。私のpovからは、かなりのopositeでなければなりません。

はあなたがこの便利な、

乾杯

+0

親愛なるDoniiを見つけることを願って、あなたの親切なアドバイスをいただき、ありがとうございます。しかし、顧客イベントは作成されませんでした。値は別のDBテーブルから挿入されるためです。私は何かしましたが、何らかのエラーメッセージが表示されています。このアドバイスがあれば、このUDF関数を使用するには、追加のソフトウェアなどをインストールする必要があります。 –

+0

このエラーを示しています。 1305 機能cen_db.sys_execが ファイル名を存在しません: データベースエラーが が エラー番号発生しましたE:\ xamppの\ htdocsに\ CEN \メイン\データベース\ DB_driver.php 行番号:330 –

関連する問題