2017-05-05 11 views
0

WordPressシステムでcreated_atに問題があります。どういうわけか、一部のユーザーがそのフィールドを無効な値に「ランダムに」更新するため、「00000000」日時として設定されます。私たちはWPコードの原因を見つけられませんでした。プロジェクトが持つ数少ないプラグインを分析しています。それは大きなコードとユーザベースを持っているので、この "ランダムな"アップデートを捕らえるためにMySQLトリガを使うほうが速いと考えました。トリガーを作成する方法MySQL 5.6

私たちはどういうわけか、シンタックスエラーやトリガコード、ラマーSQLer'sのようなものを覚えていますが、それが何であるか把握するのに役立つ必要があります。私たちが達成するために抱き合わせている何

は次のとおりです。ユーザテーブルが

  • チェックに更新されます際にはcreated_at列が
  • 変更されている場合

    • は、先ほど作成した新しいテーブルに古いデータを挿入検出しますこの目的のために(user_registration_changed_records)。

    奇妙な動作が起こった場合に備えて、各行を確認することにしました。

    DELIMITER $$ 
    CREATE TRIGGER `user_register_updated` BEFORE UPDATE ON `wp_t8y31tcd9u_users` 
    FOR EACH ROW 
    BEGIN 
    IF OLD.created_at != NEW.created_at 
    
    INSERT INTO user_registration_change_records (user_id, created_at) VALUES (OLD.ID, OLD.created_at) 
    END IF; 
    END;$$ 
    DELIMITER ; 
    

    ご協力いただきありがとうございます。

    構文エラー

    #1064 - あなたはあなたのSQL構文でエラーが発生しています。あなたは構文エラーのカップルを持っているライン6

  • +1

    構文エラーは機密情報ですか? – Shadow

    +0

    私は残念です@陰影それは私がそれがあいまいであることが分かりました、ここは#1064です - あなたはあなたのSQL構文に誤りがあります。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックして、正しい構文が使用できるようにしてください。 'INSERT INTO user_registration_change_records(user_id、created_at)VALUES(OLD.I' at line 6 –

    答えて

    1

    で「user_registration_change_records(USER_ID、のcreated_at)VALUES(OLD.I。INSERT INTO」の近くに使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください。

    • thenキーワードが欠落insert後インサートの行
    • 余分;;を欠落
    • (これは、エラーメッセージがに関するものです) end

    少なくともこれらは私が見ることができるものです。

    DELIMITER $$ 
    CREATE TRIGGER `user_register_updated` BEFORE UPDATE ON `wp_t8y31tcd9u_users` 
    FOR EACH ROW 
    BEGIN 
    
        IF OLD.created_at != NEW.created_at THEN 
    
         INSERT INTO user_registration_change_records (user_id, created_at) VALUES (OLD.ID, OLD.created_at); 
        END IF; 
    END$$ 
    DELIMITER ; 
    

    compound statement syntaxでmysqlマニュアルを使用する価値はありますが、これらはすべてそこにあるためです。

    +0

    @shadowをありがとうございます。私はオフィスに着くとすぐにコードを修正しようとします。 –

    関連する問題