とても初歩的なことかもしれないのですが教えてください。
MySQL(MariaDB10.3.15)のデータをCSVファイルで出力させたいです。
下記のようなプログラムまで作りました。
php
1<?php 2 3 // 出力ファイル名の指定 4 $file = "就業データ月次台帳_" . date("Y-m-d_(h:i:s)"). ".csv"; 5 $filepath = "../files/" . $file; 6 7 try { 8 9 // MySQLへの接続 10 $pdo = new PDO('mysql:host=localhost;dbname=general_works;charser=utf8', 'root', ''); 11 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 12 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 13 14 // データ抽出 15 $sql = "SELECT * from vtw100n"; 16 $stm = $pdo->prepare($sql); 17 $stm->execute(); 18 $res = $stm->fetchAll(PDO::FETCH_ASSOC); 19 20 21 // 接続を閉じる 22 $stm = null; 23 24 } 25 catch (PDOException $e) { 26 header('content-type: text/plain'); 27 die("データベース接続に失敗しました。: " . $e->getMessage() . "\n"); 28 } 29 $title = '社員番号,氏名,出勤日数,休日日数,出勤率分子,遅早時間,私用外出,有休消化,その他の休日,他の休日,弁当個数,おかずのみ,時間外合計,欠勤日数,欠勤回数,遅早外時間,普通残業,深夜残業,深夜所定,休2深夜,休2時間,休1代出,休2代出' . "\n"; 30 31 $row = $title; 32 33 foreach ($res AS $val ){ 34 35 $row .= 36 $val['vn01str'] . ',' . $val['vn02str'] . ',' . $val['vn03str'] . ',' . $val['vn04str'] . ',' . $val['vn05str'] . ',' . 37 $val['vn06str'] . ',' . $val['vn07str'] . ',' . $val['vn08str'] . ',' . $val['vn09str'] . ',' . $val['vn10str'] . ',' . 38 $val['vn11str'] . ',' . $val['vn12str'] . ',' . $val['vn13str'] . ',' . $val['vn14str'] . ',' . $val['vn15str'] . ',' . 39 $val['vn16str'] . ',' . $val['vn17str'] . ',' . $val['vn18str'] . ',' . $val['vn19str'] . ',' . $val['vn20str'] . ',' . 40 $val['vn21str'] . ',' . $val['vn22str'] . ',' . $val['vn23str'] . "\r\n"; 41 42 } 43 44 mb_convert_encoding($row, 'SJIS-win', 'UTF-8'); 45 46 $fp = fopen($filepath , 'w'); 47 48 foreach ($val as $row) { 49 50 fputcsv($fp, $val); 51 52 } 53 fclose($fp); 54 55?>
上記コードだと、最終行のデータを「$val行」分繰り返したCSVファイルが出力されてしまします。
なので『foreach ($val as $row)』の$valと$rowを入れ替えたりしたのですが、【Invalid argument supplied for foreach()】というエラーが表示されて、きちんと出力できません。
上記【Invalid argument supplied for foreach()】のエラーが出ないようにして、$valカラムのデータを$row行分出力してファイルに出力するには、コードをどのようにしたらよいでしょうか。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。