3

以下を使用して、SQL ファイルを csv 形式でダンプします。

    $sql = "SELECT 'id','username','name','email',
        'phone_number','city',
        'batch_code','course_type' UNION ALL
        SELECT id, username, name, email,
        phone_number, city, batch_code, course_type
        FROM users INTO OUTFILE '".$file_path."' ".
            "FIELDS TERMINATED BY ','
            ENCLOSED BY '\"'
            LINES TERMINATED BY '\r\n'";

    $db = Zend_Registry::get('db');
    $stmt = $db->query($sql, array());

ただし、users テーブルの特定のフィールドは null であり、csv 出力では \N として表示されます。文字列「NULL」に置き換えてほしい。str_replace を使用しようとしましたが、不思議なことにすべての行の後に余分な空白行が挿入されます。

4

1 に答える 1

4

FIELDS ESCAPED BY文字が (クエリで) 空の場合、文字はエスケープされず、NULL は \N ではなく NULL として出力されます。

したがって、次のようにすると、望ましい結果が得られます。

$sql = "SELECT 'id','username','name','email',
    'phone_number','city',
    'batch_code','course_type' UNION ALL
    SELECT id, username, name, email,
    phone_number, city, batch_code, course_type
    FROM users INTO OUTFILE '".$file_path."' ".
        "FIELDS TERMINATED BY ','
        ENCLOSED BY '\"'
        ESCAPED BY ''
        LINES TERMINATED BY '\r\n'";

これは 1 つの方法にすぎず、他の文字をエスケープする必要がある場合は、これを使用したくない場合があります。

于 2013-08-04T14:11:01.663 に答える