私がやりたいのは、SMSゲートウェイによって常に自動更新されるmysqlのテーブルを監視することです。
スクリプトは継続的に監視する必要があり、テーブルに新しいエントリがあるとすぐに、さらに操作を実行するために作成されたphpスクリプトをトリガーする必要があります。
どうすればこれを達成できますか?
私がやりたいのは、SMSゲートウェイによって常に自動更新されるmysqlのテーブルを監視することです。
スクリプトは継続的に監視する必要があり、テーブルに新しいエントリがあるとすぐに、さらに操作を実行するために作成されたphpスクリプトをトリガーする必要があります。
どうすればこれを達成できますか?
私はcronを使用してこれを何度も実行しました。したがって、phpスクリプトは、新しいエントリがあるかどうかを確認することから始め、新しいエントリがある場合は必要な処理を実行します。作業するものがない場合は、すぐに終了します。スクリプトの実行に時間がかかる場合は、cronジョブが重複しないように、それに応じて設定されていることを確認する必要があることに注意してください。
これを実現する簡単な方法の1つは、行がphpスクリプトによって検査されたかどうかを示す特別な列をテーブルに含めることです。したがって、phpスクリプトを実行すると、そのフィールドがfalseであるすべてのデータが検索されます。このようなもの:
SELECT id from my_table where dealt_with = FALSE;
そして、それらの行で実行されると、それらを更新します。
UPDATE my_table set dealt_with = TRUE where id=1234;
テーブルにAFTERUPDATEトリガーを追加することをお勧めします。
レコードが更新されるたびに、トリガーコードが自動的に実行されます。
トリガーのコードは、MySQLステートメントのリストです。
Jocelynは、ドキュメントを使用したプロジェクトに非常に優れたソリューションを提案しました。そうしないと、常に見落とされがちなものであるため、何かを変更したい他の開発者にとってはキラーになります。
MySQLの制限AFTER UPDATE
は、SQLのみを実行でき、PHPスクリプトは実行できないことです。したがって、最善の解決策は、PHPスクリプトを起動する*分ごとにCRONid
ジョブを実行することです。このスクリプトは、たとえばmysql_insert_idを使用して、フィールドなどの自動インクリメントフィールドの最後の値をチェックします。このロジックを使用する理由は、一部の行が削除されている可能性があるため、行数を確認したくないためです。