Я использую следующий код. Для получения csv-файла базы данных mysql. Но я хочу пропустить некоторые поля в базе данных, получая их в формате csv.
например, поля В databse – это id, имя, фамилия, имя пользователя, пароль, адрес электронной почты, дата членства, дата последнего входа
Загружая эту базу данных через опцию fputcsv, я не хочу получать пароль, последнюю дату входа в мой CSV-файл.
Как достичь этого?
Мой текущий код (который извлекает все поля из базы данных в файле csv) выглядит следующим образом:
<? require_once("../db.php"); $contents="Database Id,Last Name,First Name,User Name,Email,Permanent Address,Communication Address,Mobile,Birth Date,Gender,Payment Mode,Form Submission Date,Registration Activation Date,Memebrship Expires On,Installment\n"; $user_query = mysql_query("SELECT * from table ORDER BY RAND()"); $contents = strip_tags($contents); header("Content-Disposition: attachment; filename=my_members_".date('dF-Y').".csv"); $out = fopen('php://output', 'w'); fputcsv($out, array('Database Id', 'Last Name', 'First Name' , 'User Name' , 'Email' , 'Permanent Address', 'Communication Address', 'Mobile', 'Birth Date', 'Gender', 'Payment Mode', 'Form Submission Date', 'Registration Activation Date', 'Membership Expires On', 'Installment')); while ($row = mysql_fetch_assoc($user_query)) { fputcsv($out, $row); } ?>
$user_query = mysql_query("SELECT id, firstname, last name, username, email, membership date FROM table ORDER BY RAND()");
Если вы исключите их из своего запроса – они не будут отображаться в ваших CSV-примерах!
Затем просто убедитесь, что имена столбцов соответствуют порядку поля.
<?php $db_con = mysql_connect("localhost","root",""); $db_sel = mysql_select_db('test_one'); $result = mysql_query('SELECT * FROM `tbl_test`'); if (!$result) die('Couldn\'t fetch records'); $num_fields = mysql_num_fields($result); $headers = array(); for ($i = 0; $i < $num_fields; $i++) { $headers[] = mysql_field_name($result , $i); } $NewFName = 'sample_csv_'.rand(1,2).'.csv'; copy('sample.csv',$NewFName); /* Set permision to file */ chmod($NewFName, 0777); $fp = fopen($NewFName, 'a+'); if ($fp && $result) { $ValArr = array(); $count = 0; while ($row = mysql_fetch_row($result)) { for($t=0; $t<count(array_values($row)); $t++) { $count = $t; /* Update value for particular column */ if($count == 7 || $count == 8 || $count == 9 || $count == 10 || $count == 11 || $count == 12 || $count == 13 || $count == 14 || $count == 15 || $count == 16 || $count == 17 || $count == 18 || $count == 19 || $count == 20 || $count == 21 || $count == 32 || $count == 35 || $count == 37 || $count == 40) { if(array_values($row)[$t] == '0') { $NewVal = 'No'; }else if(array_values($row)[$t] == '1') { $NewVal = 'Yes'; }else { } }else { $NewVal = array_values($row)[$t]; } /* Skip some database fields value to write in CSV */ if($count == 34 || $count == 39 || $count == 44 || $count == 45 || $count == 46 || $count == 47 || $count == 48) { }else { $NewVal = str_replace(',','&',$NewVal); fwrite($fp, $NewVal.','); } } fwrite($fp, "\n"); } fputcsv($fp, $ValArr); die; }
Здесь также полный код для значений полей пропуска или значения обновления.