「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > データを CSV ファイルにフェッチすると、PDO プリペアド ステートメントが二重の結果を返すのはなぜですか?

データを CSV ファイルにフェッチすると、PDO プリペアド ステートメントが二重の結果を返すのはなぜですか?

2024 年 11 月 8 日に公開
ブラウズ:244

Why is my PDO prepared statement returning double results when fetching data into a CSV file?

PDO プリペアド ステートメントで二重の結果がフェッチされる

ユーザーが、データをファイルに出力するときに、PDO プリペアド ステートメントが二重の結果を返すという問題が発生しました。 CSVファイル。問題のコードは、$result_get_rows->fetch() 関数を利用してデータベースから行を取得します。

Fetch() メソッドについて

fetch() PDOStatement オブジェクトのメソッドは、結果セットから行を取得するために使用されます。デフォルトでは、インデックス付き配列 (列番号による) と連想配列 (列名による) の両方として行が返されます。

問題の解決

二重の結果を修正するには、 fetch() メソッドの fetch_style パラメータを使用して、結果行を返す方法を指定することをお勧めします。このパラメータは次の定数のいずれかを受け入れます:

  • PDO::FETCH_ASSOC: 列名でインデックス付けされた連想配列を返します。
  • PDO::FETCH_NUM: 列でインデックス付けされたインデックス付き配列を返します。 number.
  • PDO::FETCH_BOTH (デフォルト): 列名と列の両方でインデックス付けされた配列を返します。列番号.

修正コード

PDO::FETCH_ASSOC を使用すると、次のようにコードを修正できます:

while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_ASSOC)) {
  $csv .= '"'.join('","', str_replace('"', '""', $rows_get_rows))."\"\n";
}

この変更により、行が連想配列として返されるようになり、CSV ファイルに出力する際の値の重複が効果的に防止されます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3