#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. Спасибо, но я все еще не вижу значения из всех полей запроса.