質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

431閲覧

DBからデータをエクスポートしCSVで出力したい

vike

総合スコア17

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2017/09/21 05:30

編集2017/09/21 15:14

###前提・実現したいこと
DBから数字と漢字が混じったデータをエクスポートし、CSV形式で出力する。
できればcsvファイルをインポートできるようにしたい。

https://teratail.com/questions/25415
こちらのページのソースを使用しているのですが、DB,PHPともに初心者で使い方がよく理解できていません。

###発生している問題・エラーメッセージ

Notice: Undefined variable: col1 in /Applications/MAMP/htdocs/www/csvvvv.php on line 29 Warning: fputcsv() expects parameter 2 to be array, null given in /Applications/MAMP/php on line 29 Notice: Undefined variable: col2 in /Applications/MAMP/php on line 30 Warning: fputcsv() expects parameter 2 to be array, null given in /Applications/MAMP/on line 30

エラーはfreeの関数をどのように使用するかわからず出ています。

###該当のソースコード

php

1<?php 2$mysqli = new mysqli("localhost", "root", "root", "DATABASE"); 3ini_set( 'display_errors', 1 ); 4if ($mysqli->connect_errno) { 5 printf("Connect failed: %s\n", $mysqli->connect_error); 6 exit(); 7 ini_set( 'display_errors', 1 ); 8} 9 10$query = "SELECT COL1,COL2 FROM TABLE"; 11 12if ($result = $mysqli->query($query)) { 13 ini_set( 'display_errors', 1 ); 14 $col1 = array("COL1"); 15 $col2 = array("COL2"); 16 17 while ($row = $result->fetch_assoc()) { 18 ini_set( 'display_errors', 1 ); 19 $col1 = $row['COL1']; 20 $col2 = $row['COL2']; 21 22 } 23 } 24 25 ini_set( 'display_errors', 1 ); 26 27 $f = fopen('mix.csv', 'w'); 28ini_set( 'display_errors', 1 ); 29 30 fputcsv($f, $col1); 31 fputcsv($f, $col2); 32ini_set( 'display_errors', 1 ); 33 34 fclose($f); 35 ini_set( 'display_errors', 1 ); 36 $mysqli->close(); 37?> 38

###補足情報(言語/FW/ツール等のバージョンなど)
Mac
MAMP使用
php ver 7.1.6
Apache ver 2.2.32

わかりにくいですが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/09/21 09:36 編集

queryに記載の「COL 1」はTABLEに定義されていますか?そもそもスペースはよろしくないかと。また、DATABASEにTABLEというテーブルを定義して、必要なデータを投入しているのですか?TABLEの定義も提示されると適切な指摘を得られやすかと思われます。
vike

2017/09/21 15:10

すいません、定義とは構造の部分の名前の場所でよろしかったでしょうか?スペースは削除しておきました。勘違いしていたのですが、FROMの後にはtable名ではなくdatabase名を定義すれば良いのでしょうか?
guest

回答2

0

ベストアンサー

たぶんこれじゃないですかね
https://stackoverflow.com/questions/34496010/fatal-error-call-to-a-member-function-free-on-boolean

freeは消してcloseつかってな!って書いてる気がします
動作確認はしてないので外れてたら申し訳です

投稿2017/09/21 14:38

Somen510

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vike

2017/09/21 15:12

ありがとうございます。 上記のエラーは消えたのですが、新しいエラーが出てしまいました。 質問を変更しておきますのでよろしければ意見をお願いします。
Somen510

2017/09/21 22:54

mysqli は、mysql 用ではあるんですがいまいちな評価を受けているので 汎用的なPDOでの書き方を覚えた方が為になると思います。 他にも、ファイルに出力するなら、file_get_contents 使う方が安全です ... そもそも、フレームワーク使うのが一番いいんですけど ... 最初のリンク先見ましたが、色々とツッコミどころのあるコードだったので新しくサンプル書いてみました。 こういうテーブルがある想定です。 | id | title | |:-----------|------------:| | 1 | あいうえお | | 2 | カキクケコ | ```php <?php // データベース名を指定 $database_name = 'test'; $dns = 'mysql:host=localhost;dbname=' . $database_name; $user_name = 'root'; // ユーザ名を指定 $password = ''; // パスワードを指定 $pdo = new PDO($dns, $user_name); // テーブル名を指定 $table_name = 'tests'; // クエリを作成 $query = 'SELECT * FROM ' . $table_name; // ファイル名を指定 $file_name = 'test.csv'; // 出力する最初の1行のコンテンツを指定 $contents_h = 'id, title' . PHP_EOL; file_put_contents($file_name, $contents_h); foreach ($pdo->query($query) as $row) { // 連想配列の形で、それぞれの行情報が取得できます $id = $row['id']; $title = $row['title']; // FILE_APPEND を指定することでファイルに追記できます $contents = $id . ', ' . $title . PHP_EOL; file_put_contents($file_name, $contents, FILE_APPEND); } ``` ちょいちょいコメントを残しているので、自分の環境に合うように書き換えてください。 それぞれの関数の詳細が知りたければ、PHP.net を見てください。 test.csv の中身は以下の通り ``` id,title 1,あいうえお 2,カキクケコ ``` 初心者とのことなので、順番に理解していくのが大事だと思います。 手順としては、 1. php から文字列出力できる 2. pdo に接続できる 3. pdo からデータを取得できる 4. データをファイルに書き込む このように「どういう手順か」を最初に考えてそれぞれに対して検索すると言うことをすればできるようになってくると思います。
guest

0

たぶんfreeの箇所ではなく、closeのところじゃないでしょうか。
ファイルを閉じる関数はfcloseです。
PHPに単体でclose関数があるのかはわかりませんが(何かのクラスには存在する)、そのclose関数内でエラーが出たんじゃないかと思います。
fcloseに修正してみてください。

投稿2017/09/21 05:58

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vike

2017/09/21 06:43

申し訳ございません。 fcloseに変更しましたが、エラーは変わらぬままです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問