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

PHP未显示MySQL查询中的所有字段,php,mysql,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.StatusDes

我正在从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>";
    }
}
(最后三个字段为空。这是预期的)

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

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

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

前两个查询行的var_转储:

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。

由于引号、逗号和分号的错误混合,您的
回显
行中出现语法错误

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

echo "<tr>\n<td>" . implode("</td>\n<td>", $result) . "</td>\n<tr>";
echo“\n”。内爆(“\n”,$result)。“\n”;

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

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

"<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>";
”
“$result[0]”
“$result[1]”
“$result[2]”
“$result[3]”
“$result[4]”
“$result[5]”
“$result[6]”
“$result[7]”
";

您的
echo
语句中存在引用问题,您应该得到一个语法错误。由于脚本正在运行,实际代码必须与您发布的代码不同。echo语句中的拼写错误不会转换为SO。代码中的实际echo语句是正确的。同样,问题是我没有得到表中显示的所有字段,即$result[3]和$result[4]没有给我预期的值。甚至尝试仅回显这些值(单独),但它们为空。请向我们显示
var_dump($result)的结果。var_dump和workbench为同一id显示了不同的学生姓名。您确定要连接到同一个db吗?谢谢,但我仍然没有看到所有查询字段中的值。
"<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>";