简体   繁体   English

php脚本将mysql表数据导出到csv,从某些列转义数据并将字符串映射到数组?

[英]Php script to export mysql table data to a csv, escaping data from certain columns and mapping strings to arrays?

I need to migrate data within our old bug tracker (Zentrack) to our new one and the only import method I can use is to import from CSV. 我需要将旧的错误跟踪器(Zentrack)中的数据迁移到新的错误跟踪器中,唯一可以使用的导入方法是从CSV导入。 To do so I need the data from two tables, tickets and logs so I wrote the script below in php. 为此,我需要来自两个表,票证和日志的数据,因此我在php中编写了以下脚本。

<?php

error_reporting(E_ALL);

$host = "localhost"; 
$user = "dbuser"; 
$pass = "dbpass"; 
$db = "zentrk";

$users[1] = 'john';
$users[4] = 'sally';
$users[5] = 'nick';
$users[6] = 'ralph';

$r = mysql_connect($host, $user, $pass);

if (!$r) {
    echo "Could not connect to server\n";
    trigger_error(mysql_error(), E_USER_ERROR);
}

echo mysql_get_server_info() . "\n"; 

$r2 = mysql_select_db($db);

if (!$r2) {
    echo "Cannot select database\n";
    trigger_error(mysql_error(), E_USER_ERROR); 
}

$query_tickets = "select ZENTRACK_TICKETS.id, ZENTRACK_TICKETS.title, ZENTRACK_TICKETS.priority, ZENTRACK_TICKETS.status, ZENTRACK_TICKETS.description, ZENTRACK_TICKETS.otime, 
ZENTRACK_TICKETS.type_id, ZENTRACK_TICKETS.user_id, ZENTRACK_TICKETS.system_id, ZENTRACK_TICKETS.creator_id, ZENTRACK_TICKETS.proj_key
from ZENTRACK_TICKETS
where ZENTRACK_TICKETS.status = 'OPEN' 
and ZENTRACK_TICKETS.system_id in ('18', '3', '6', '1', '16', '7', '9', '4', '20') 
and ZENTRACK_TICKETS.type_id not in ('1', '10', '5')";

$rs = mysql_query($query_tickets);

if (!$rs) {
    echo "Could not execute query: $query";
    trigger_error(mysql_error(), E_USER_ERROR); 
} else {
    echo "Query: $query executed\n";
} 

$export = array();

$export[] = 'id,title,created date,priority,type,assigned,description,system,creator,project key,log1,log2,log3,log4,log5,log6,log7,log8,log9,log10
';
while ($row = mysql_fetch_assoc($rs)) {
   $line = '';
   $count = 0;
    $line .= $row['id'] . "," . $row['title'] . "," . date('d-M-y h:m a',$row['otime']) . "," . $row['priority'] . "," . $row['type_id'] . "," . $row['user_id'] . "," . $row['description'] . "," . $row['system_id'] . "," . $row['creator_id'] . "," . $row['proj_key'] . ",";      


    $logs = find_logs($id = $row['id']);
    foreach($logs as $log_entry) {
      $line .= $log_entry.",";
      $count++;
    }
    while($count < 10) {
      $line .= ",";
      $count++;
    } 

    $export[] = $line.'
';
}

mysql_close();


// print_r($export);

$file = 'tickets.csv';

file_put_contents($file, $export);

function find_logs($ticket) {

 $content = array();

 $query = "select ZENTRACK_LOGS.created, ZENTRACK_LOGS.user_id, ZENTRACK_LOGS.entry 
          from ZENTRACK_LOGS 
          where ZENTRACK_LOGS.ticket_id = $ticket 
          and ZENTRACK_LOGS.action <> 'EDIT' ";

   $rs = mysql_query($query);

   if (!$rs) {
    echo "Could not execute query: $query";
    trigger_error(mysql_error(), E_USER_ERROR); 
    } 

   while ($row = mysql_fetch_assoc($rs)) {
    $date = date('d-M-y h:m a',$row['created']);
    $content[] = $date . ";" . $row['user_id'] . ";" . $row['entry'];
   }

 return $content;
}
?>

I'm running into two problems with this script, that I'm sure are due to me being new to PHP. 我在使用此脚本时遇到了两个问题,我确定这是由于我是PHP新手。

1) I need to escape out the data in $row['description'] as it contains both carriage returns and , in the text that is incorrectly breaking the output into new rows when saved to CSV. 1)我需要转义$ row ['description']中的数据,因为它同时包含回车符和,在文本中,当保存为CSV时,错误地将输出分成了新的行。 I need to save the contents of this row within " " but I'm not sure how to do so. 我需要将该行的内容保存在“”中,但是我不确定如何保存。

2) The data returned in $row['user_id'], $row['creator_id'] and $row['user_id'] within the find_logs function returns a number, which I need to find that number and replace with the corresponding string in the $users array. 2)在find_logs函数内的$ row ['user_id'],$ row ['creator_id']和$ row ['user_id']中返回的数据返回一个数字,我需要找到该数字并替换为相应的字符串在$ users数组中。 What's the best way to do this? 最好的方法是什么?

处理csv文件时,请使用fgetcsvfputcsv ,为它提供一个数组,它将为您处理转义。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM