PHP没有显示MySQL查询中的所有字段



我正在从PHP查询MySQL数据库。

global $pdo;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT D.RecordID, Info.StudentName, Info.StudentNumber, D.StatusCode, D.CommMethod, D.AbsenceType, D.AbsenceCode, tblclosuretypes.StatusDescription
FROM
(SELECT vstudentlist.StudentName, vstudentlist.StudentNumber from vstudentlist" . (($classnum!='')?" WHERE vstudentlist.ClassNum=".$classnum:'') . ") Info
LEFT JOIN
(SELECT tblschoolattendancedata.RecordID, tblschoolattendancedata.StudentNumber, tblschoolattendancedata.AttendanceDate, tblschoolattendancedata.StatusCode, tblschoolattendancedata.CommMethod, tblschoolattendancedata.AbsenceType, tblschoolattendancedata.AbsenceCode
FROM tblschoolattendancedata WHERE AttendanceDate = '" . $attdate . "') D
ON Info.StudentNumber = D.StudentNumber
LEFT JOIN tblclosuretypes ON D.StatusCode = tblclosuretypes.StatusCode ORDER BY Info.StudentName;";
//echo $sql;
$res = $pdo->query($sql);
$count = 1;
if($res->rowCount() > 0){
while($result = $res->fetch()){
echo 
"<tr>
<td>",$result[0],"</td>
<td>",$result[1],"</td>
<td>",$result[2],"</td>
<td>",$result[3],"</td>
<td>",$result[4],"</td>
<td>",$result[5],"</td>
<td>",$result[6],"</td>
<td>",$result[7],"</td>
</tr>";
}
}

我已经在Workbench中测试了查询,它返回了所需的结果

RecordID    StudentName  StudentNumber  StatusCode CommMethod  AbsenceType AbsenceCode StatusDescription
44154_0026  Student 1        26             D          1            
44154_0112  Student 2        112            D          1            
44154_0080  Student 3        80             D          1            
44154_0104  Student 4        104            D          1            
44154_0009  Student 5         9             D          1            
44154_0071  Student 6         71            D          1            
44154_0084  Student 7         84            D          1            
44154_0096  Student 8         96            D          1            
44154_0003  Student 9          3            D          1            
44154_0093  Student 10        93            D          1

(最后三个字段为空。这是预期的(。

如果我在PHP中回显查询并将其粘贴到Workbench中,我也会得到预期的结果。

但是,HTML表只显示了所有10行的前3个字段。第四个和第五个字段(StatusCode、CommMethod(为空。我没有收到任何PHP错误,代码似乎正在运行完成(同样,它产生了预期的行数(。我测试了使用$res->columnCount()从查询中返回的字段数是否正确,并得到了值8,正如预期的那样。

我想知道为什么它只显示每个记录中前三个字段的值。

前两个查询行的var_dump:

array(16) { 
["RecordID"]=> string(10) "44154_0026" 
[0]=> string(10) "44154_0026" 
["StudentName"]=> string(14) "Andre Switenki" 
[1]=> string(14) "Andre Switenki" 
["StudentNumber"]=> string(2) "26" 
[2]=> string(2) "26" 
["StatusCode"]=> NULL 
[3]=> NULL 
["CommMethod"]=> NULL 
[4]=> NULL 
["AbsenceType"]=> NULL 
[5]=> NULL 
["AbsenceCode"]=> NULL 
[6]=> NULL 
["StatusDescription"]=> NULL 
[7]=> NULL } 
array(16) { ["RecordID"]=> string(10) "44154_0112" [0]=> string(10) "44154_0112" ["StudentName"]=> string(15) "Erick Macedonio" [1]=> string(15) "Erick Macedonio" ["StudentNumber"]=> string(3) "112" [2]=> string(3) "112" ["StatusCode"]=> NULL [3]=> NULL ["CommMethod"]=> NULL [4]=> NULL ["AbsenceType"]=> NULL [5]=> NULL ["AbsenceCode"]=> NULL [6]=> NULL ["StatusDescription"]=> NULL [7]=> NULL }

我可以看到StatusCode和CommMethod字段返回NULL。问题是,当我回显查询,将其粘贴到Workbench并获取这些字段的结果时,为什么它们会返回NULL。

您的问题可能在引号上。用这种方式。

"<tr>
<td>".$result[0]."</td>
<td>".$result[1]."</td>
<td>".$result[2]."</td>
<td>".$result[3]."</td>
<td>".$result[4]."</td>
<td>".$result[5]."</td>
<td>".$result[6]."</td>
<td>".$result[7]."</td>
</tr>";

由于引号、逗号和分号的混合不正确,echo行中出现语法错误。

但是,由于您按顺序回显所有列,因此可以使用implode()来连接它们,而不是显式列出它们。

echo "<tr>n<td>" . implode("</td>n<td>", $result) . "</td>n<tr>";

如果你想使用这个方法,你应该使用$res->fetch(PDO::FETCH_NUM),否则你会得到每个列的重复。

最新更新