1

特定の選択されたレコード (ユーザー入力に応じて) が選択され、CSV ファイルにエクスポートされるスクリプトを動作させようとしています。これを行うためにあらゆる種類の方法を試しました。これまでのところ、これは私が見つけることができる最も成功したものです(実際には数年前に行ったコードから)が、行がなくなるまで最初の行を何度も返すだけです(私のおがくずを見ることができます-結果が尽きるまで行を取得し続けるように PHP に指示していました)。私の質問:おそらくこれを行う簡単な方法があります-何か考えはありますか? そうでない場合、次にループが実行されたときに MySQL を次の行に進めるにはどうすればよいですか? とにかくmysql_fetch_arrayでそれを行うべきだと思いました。

はい、私は fputcsv を見てきましたが、渡すデータを取得できないようです。fputcsv を使用して配列を渡し、mysql_fetch_array、mysql_fetch_assoc、または mysql_fetch_row を介して配列を取得しようとすると、CSV ファイルは常に空白になります。

私は進みながら学んでいますが、これは、前進し続けるために何かを学んでいないときの 1 つです。そして、私もそこまで詳しくありません。

私のコード、または少なくとも必要なだけ:

        $result = mysql_query("SELECT id FROM student_history WHERE username='$username'");
    $numrows = mysql_num_rows($result);
    if (!$result) {
        die("Query to show fields from table failed!:" .mysql_error());
    }
    $write = fopen("exportedmagic.csv", 'w') or die ("Can't create/open file to write! Drats!");
    fwrite($write, "ID, Username, Class, Status, Date, Time\n");
    while($numrows > 0) {
        $query = "SELECT id, username, class, status, date, time FROM student_history WHERE username='$username'";
        $result = mysql_query($query);
        $row = mysql_fetch_array($result);
        $id = $row['id'];
        $username = $row['username'];
        $class = $row['class'];
        $status = $row['status'];
        $date = $row['date'];
        $time = $row['time'];
        fwrite($write, $id .", " .$username .", " .$class .", " .$status .", " .$date .", " .$time ."\n");
        $numrows--;
    }
4

3 に答える 3

0

クエリ結果を CSV 出力ファイルにダンプする MySQL の組み込み機能を検討しましたか?

http://dev.mysql.com/doc/refman/5.5/en/select-into.html

ファイルがデータベースサーバーに書き込まれるなど、いくつかの注意事項があります。

しかし、あなたのコードについて言えば、while ループに mysql_query() を配置しているため、1 行だけをフェッチした後に効果的にクエリを最初からやり直すことに注意してください。私は次のようなものをもっと期待しています:

$result = mysql_query(...);
while ($row = mysql_fetch_array($result)) {
  fputcsv($filehandle, $row);
}
于 2013-01-26T23:06:54.547 に答える
0

に変更してみてください-

if($numrows > 0) {
    $query = "SELECT id, username, class, status, date, time FROM student_history WHERE username='$username'";
    $result = mysql_query($query);
    while ($row = mysql_fetch_array($result){
        $id = $row['id'];
        $username = $row['username'];
        $class = $row['class'];
        $status = $row['status'];
        $date = $row['date'];
        $time = $row['time'];
        fwrite($write, $id .", " .$username .", " .$class .", " .$status .", " .$date .", " .$time ."\n");
    }
}

使用while($numrows > 0){$query= ... $numrows--;すると、ループを通過するたびにクエリをやり直します。

fwrite()また、を使用する代わりにfputcsv()、現在のコードで各列の値を反復処理する必要なく行を追加できるようにすることができます。

注:拡張機能が減価償却されているため、mysqli_*またはへの更新を検討する必要があります。PDOmysql_*

于 2013-01-26T23:13:25.160 に答える