sql >> データベース >  >> RDS >> Mysql

PHP文字列内でMySQLコードをフォーマットする

    私の意見では、これを行うための最良の方法は、正規表現またはSED / AWKを使用してすべてをフォーマットすることです。これにより、その場で置換マップのボーナスが得られます。ただし、コードエラーが発生する可能性が高いため、難しいです。

    少し作業をさせてください。良い解決策を考え出すことができるかどうかを確認できます。すべてのSQLを二重引用符で囲んでいることが保証されていますか?

    編集

    これを試してください

    cd {{directory}} && find . -type f -print0 |
      xargs -0 perl -i.bak -pe 's/select/SELECT/g ; s/from/\n\tFROM/g ; s/where/\n\t\tWHERE/g ; s/and/\n\t\tAND/g ; s/order by/\n\t\tORDER BY/g ; s/asc/ASC/g ; s/desc/DESC/g ;'
    

    これが例です

    $ printf '"select * from whatever where this = that and active = 1 order by something asc";\n' |
    > perl -pe 's/select/SELECT/g ; s/from/\n\tFROM/g ; s/where/\n\t\tWHERE/g ; s/and/\n\t\tAND/g ; s/order by/\n\t\tORDER BY/g ; s/asc/ASC/g ; s/desc/DESC/g ;'
    
    "SELECT * 
        FROM whatever 
            WHERE this = that 
            AND active = 1 
            ORDER BY something ASC";
    

    きれいですか?いいえ、まったく機能しません。....うん。

    このホットな混乱を実行する時間ができたら、フィルターファイルと、おそらく小さなbashプログラムなどを作成してみます。

    編集

    これがいくつかの改訂されたコードで、よりきれいに見えます(sorta)

    printf '$request1 = "select * from whatever where this = that and active = 1 order by something asc";\n' | 
    perl -pe 's/select/SELECT/gi ; s/from/\n  FROM/gi ; s/where/\n    WHERE/gi ; s/and/\n    AND/gi ; s/order by/\n      ORDER BY/gi ; s/asc/ASC/gi ; s/desc/DESC/gi ;' | 
    awk 'NR == 1 {pad = length($0)/2; print} NR > 1 {gsub(/\r/,""); printf "%*s%s\n", pad, " ", $0}'
    
    __OUTPUTS__
    $request1 = "SELECT * 
                 FROM whatever 
                   WHERE this = that 
                   AND active = 1 
                     ORDER BY something ASC";
    


    1. Oracle12cのインストールで一時的な場所にアクセスできませんでした

    2. 挿入できません:エラー:配列値は{またはディメンション情報で始まる必要があります

    3. コマンドライン引数を使用してPostgreSQL.sqlファイルを実行します

    4. その列に基づいてクエリを作成する方法