PHP не показывает все поля из запроса MySQL

#php #mysql

#php #mysql

Вопрос:

Я запрашиваю базу данных MySQL из PHP.

 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 отображаются только первые 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 и получить результаты для этих полей.

Комментарии:

1. У вас проблемы с цитированием в вашем echo заявлении, вы должны получать синтаксическую ошибку.

2. Поскольку скрипт запущен, фактический код должен отличаться от того, что вы опубликовали.

3. опечатки в операторе echo связаны с переносом в SO. Фактический оператор echo в коде правильный. Опять же, проблема в том, что я не могу отобразить все поля в таблице, т.Е. $result[3] и $result[4] не дают мне ожидаемого значения. Даже пытался повторить только эти значения (отдельно), и они пустые.

4. Пожалуйста, покажите нам результаты var_dump($result); .

5. var_dump и workbench отображают разные имена учащихся для одного и того же идентификатора. Вы уверены, что подключаетесь к той же БД?

Ответ №1:

Ваши проблемы могут быть в кавычках. Используйте этот способ.

 "<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>";
 

Ответ №2:

У вас есть синтаксические ошибки в вашей echo строке из-за неправильного смешивания кавычек, запятых и точек с запятой.

Но поскольку вы повторяете все столбцы по порядку, вы можете использовать implode() их для объединения, а не для их явного перечисления.

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

И если вы хотите использовать этот метод, вы должны использовать $res->fetch(PDO::FETCH_NUM) , иначе вы получите дублирование каждого столбца.

Комментарии:

1. Спасибо, но я все еще не вижу значения из всех полей запроса.