[PHP-users 3664] Re: pg_fetch_rowと配列の効率的な使い方
Osamu Shigematsu
php-users@php.gr.jp
Mon, 19 Nov 2001 16:43:42 +0900
重松です。
ざっと見た感じ、
> do {
> @$row = pg_Fetch_Row ($result, $i);
> if ($row) {
> for($k=0;$k<20;$k++) { $sRes .= $row[$k];}
> $sRes .= '<BR>';
> $i++;
> }
> } while ($row);
の部分がキモでしょうけど、
while(@$row = pg_fetch_row($result,$i++))
$sRes .= implode('<br />',$row);
とすれば良いのではないでしょうかね。
当然 select で引っ張ってくる時に余計なデータがあって困るなら
* でなくて、順番に欲しいカラムを列挙すればいいし、
普通は、こういう速度よりも、開発速度、保守のしやすさから、
pg_fetch_array() を使うと思いますし、さらにいえば、
DB に依存しないように抽象化した class library を使うのが普通だと思います。
PHPLIB を使う場合には、
if(!$db->query($sql))
die($sql);
$sRes = "<table><thead><th....." // ヘッダ
for(i = 1; $db->next_recod(); ++$i){
extract($db->Record()); // 各カラム名の変数に展開する
$sRes .= "<tr><td>$i</td><td>$column1</td><td>$column2</td></tr>";
}
$sRes .= "</tbody></table>";
ってな感じですか。
# 私はもちろん、こんな HTML をそのまま埋めるようなコードは書きません。
# だって、HTML と PHP の両方を知っている人でないと、保守できませんから。
たとえば、意味のない後置の ++ 演算子だとか、複数回の $row の判定など、
ものすごく冗長だし、無駄が多い書き方を故意にしている気がしますが。
# 前にも書きましたが、$i++ は ++$i よりも低速ですから、ループのカウンタなどで
# 後置の ++ で加算するのは何の利益もないです。