使用MySQL的CGI:如何显示表中的所有数据?

时间:2016-12-01 15:55:41

标签: php mysql perl cgi

这是作业。当我运行脚本时,它只显示数据库中的一行数据。我认为my @record = $sql->fetchAll();是个问题。我该怎么做才能从表中输出所有行?

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use strict;
use warnings;

my $idnum = param('idnum');
my $year = param('year');
my $make = param('make');
my $model = param('model');
my $color = param('color');
my $price = param('price');

print "Content-type: text/html \n\n";;

my $db = "DBI:mysql:cars:localhost";
my $dbh = DBI->connect($db,"root","",{RaiseError=>1});

my $sql = $dbh->prepare(qq(select * from cars));
$sql->execute;

print <<here;

<div align="center">
<h2>Cars</h2>
<table border ="2" bordercolor="green">
<tr>
<td>Id</td><td>Year</td><td>Make</td><td>Model</td><td>Color</td>    <td>Price</td>
</TR>
here

my @record = $sql->fetchrow_array;  ### there is only one row in resultset

for(my $i = 0; $i < @record; $i++ ) {
    print "<td>$record[$i]</td>";
}
print "</tr>";

print "</table></div></body></html>";

$dbh->disconnect();

1 个答案:

答案 0 :(得分:1)

fetchrow_array方法一次只返回一行,直到它耗尽为止。它是迭代器。所以你的代码一次正确打印一行。

您需要迭代结果,直到不再剩下。

while (my @record = $sql->fetchrow_array) {
   print "<tr>";
   print "<td>$_</td>" foreach @record;
   print "</tr>";
}

我使用了相当短的foreach @record,它为您提供了数组中的每个元素,一个接一个。这样你就不需要处理索引了。将它放在要在循环中重复的行之后称为后缀表示法