- 締切済み
PHPからCSVをアップロードしてmysqlに登録
質問をお願いします。 PHPからCSVをアップロードして、同時にmysqlに登録しようと思っていますが、 うまくいきません。データーベースに接続しているのですが、 テーブルを指定しても、うまくいかなく困っています。 現在、下記のプログラムはテーブルを指定していません。 テーブル指定して作成方法を教えていただければ助かります。 PHPが詳しい方、よろしくお願いします。 <?php while (($data = fgetcsv($file)) !== false) { // $data 配列の各要素にアクセスし、適切な変数に代入 // 例: $data[0] は1列目のデータ、$data[1] は2列目のデータ $column1 = $data[0]; $column2 = $data[1]; // 他の列も同様に // INSERT文を準備 $stmt = $pdo->prepare("INSERT INTO テーブル (column1, column2) VALUES (:column1, :column2)"); $stmt->bindParam(':column1', $column1); $stmt->bindParam(':column2', $column2); // 他の列も同様にバインド // SQLを実行 $stmt->execute(); } fclose($file); ?>
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- dell_OK
- ベストアンサー率13% (766/5720)
載せられたプログラムを試してみたところ、データベースに登録できました。 変数 $file の定義が不明なので、以下のようにして補いました。 $file = fopen('csv.csv', 'r'); 'csv.csv'は私が手で作ったcsvファイルのファイル名でプログラムと同じフォルダに配置しました。 実際はアップロードされたテンポラリーファイル、または、それを保存したファイル、のファイルパスになると思います。
- t_ohta
- ベストアンサー率38% (5238/13705)
問題は質問に書かれているプログラムの部分では無く $pdo にインスタンスを入れている(DB接続を実行している)部分にあると思います。 そこがどのように書かれているのかが問題でしょう。 またデータベース自体やDBのユーザーが接続を受け付ける設定になっているのかが問題の可能性もあります。
- agehage
- ベストアンサー率22% (2752/12072)
ここに書いた以外の部分でデータベースの指定をしていますよね? CSVから、ではなく、単純にMySQLにアクセスはできるのか? 例えば簡単なテーブルを作り、そこに単純なレコードの追加はできる? while分も使わずにひとつのレコードだけ足してみるということ テープルの指定をしていないというが、なぜしないのか。ソースの「テーブル」のところにテーブル名を記載するのです
補足
データーベースの接続は下記のプログラムになります。 他のプログラムもこういった形でアクセスしていますので、これ自体は問題ないと思うのですが。 <?php require("../db.php"); // セッション開始 session_start(); ?>