#php
#php
Вопрос:
Я выполняю довольно прямой запрос mysql и возвращаю результаты в таблицу. В БД было три записи, и запрос извлекается из двух таблиц. В результате я получаю количество из трех записей (повторяющих mysql_num_rows), но в таблице отображаются только две. Использование команды print_r в результате массива показывает только одну конкретную запись — остальные записи отображаются в print-r.. Я добавил еще одну запись в БД, и теперь отображаются три записи — и та же запись, что и раньше, не отображается и является единственной записью в команде print_r . Вот соответствующий код:
<td id="page1">
<?php
$limit = 15; // Set limit to show for pagination
$page = $_GET['page']; // get page number from submit
if($page)
$start = ($page - 1) * $limit; // first item to display on this page
else
$start = 0; // if no page var is given, set start to 0
$query = "SELECT PartyMstr.PartyMstrID, UserName, FirstName, LastName, XrefPartyRoleID
FROM PartyMstrRole, PartyMstr
WHERE PartyMstr.PartyMstrID = PartyMstrRole.PartyMstrID amp;amp;
PartyMstrRole.XrefPartyRoleID = 1
ORDER BY LastName, FirstName ASC
LIMIT $start, $limit
";
$result = mysql_query($query, $connection);
$row = mysql_fetch_array($result) or die(mysql_error());
$totalitems1 = mysql_num_rows($result);
?>
<center><h3> Admin User List </h3></center>
<?php
echo "<table border="1" align="center">";
echo "<tr><th>PartyMaster ID</th>";
echo "<th>UserName</th>";
echo "<th>Last, First</th>";
echo "<th>Link</th></tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr><td>";
echo $row['PartyMstrID'];
echo "<td>";
echo $row['UserName'];
echo "<td>";
echo " " . $row['LastName'] . ", " . $row['FirstName'] . " ";
echo "<td>";
echo "<a href = "http://www.505575.com/editUser.php?id=" . $row['PartyMstrID'] . "" >Edit</a>";
// echo "<td>";
// echo $row['XrefPartyRoleID'];
echo "</td></tr>";
}
echo "</table><br/><br/> ";
$paginaton = getPaginationString( $page, $totalitems, $limit,
$adjacents = 1,
$targetpage = "adminUserList.php",
$pagestring = "?page="
); // Functon found in functions.php
echo $paginaton;
?>
</td>
Я потратил много времени в Интернете на безуспешные поиски объяснения. Я отключил строку $pagination
кода без эффекта. Я пробовал различные другие трюки и повторил вывод. Количество возвращаемых строк ( n
) всегда правильное, но n-1
в таблице отображаются только строки. Есть идеи?
Спасибо — Дон
Комментарии:
1. В качестве пояснения: вы придерживались do
print_r($row)
только внутри вашегоwhile
-loop?2. Вы можете подумать об обучении
PDO
, в любом случае это будет устаревшим.
Ответ №1:
Каждый раз, когда вы вызываете mysql_fetch_array
, вы берете строку из ресурса. Когда у ресурса больше нет строк, он возвращает false . Вот как while ($a = mysql_fetch_array($resource))
работают циклы.
$result = mysql_query($query, $connection);
$row = mysql_fetch_array($result) or die(mysql_error());
$totalitems1 = mysql_num_rows($result);
// first row is taken from resource
....
while($row = mysql_fetch_array($result))
// now take the rest of the rows
Как вы можете видеть, ваш код делает именно то, что вы ему говорите! Просто удалите первую $row = mysql_fetch_array($result) or die(mysql_error());
, поскольку она все равно не служит никакой цели.
Комментарии:
1. Спасибо всем, кто ответил — ответ очевиден, как только указано. Я проверил первый из многих правильных ответов как правильный только для упрощения. Еще раз спасибо.
Ответ №2:
Вы извлекаете первый результат вне вашего цикла while.
Ответ №3:
$query = "SELECT PartyMstr.PartyMstrID, UserName, FirstName, LastName, XrefPartyRoleID
FROM PartyMstrRole, PartyMstr
WHERE PartyMstr.PartyMstrID = PartyMstrRole.PartyMstrID amp;amp; PartyMstrRole.XrefPartyRoleID = 1
ORDER BY LastName, FirstName ASC
LIMIT $start,$limit";
$result = mysql_query($query, $connection);
$row = mysql_fetch_array($result) or die(mysql_error());
$totalitems1 = mysql_num_rows($result);
необходимо:
$query = "SELECT PartyMstr.PartyMstrID, UserName, FirstName, LastName, XrefPartyRoleID
FROM PartyMstrRole, PartyMstr
WHERE PartyMstr.PartyMstrID = PartyMstrRole.PartyMstrID amp;amp; PartyMstrRole.XrefPartyRoleID = 1
ORDER BY LastName, FirstName ASC
LIMIT $start,$limit";
$result = mysql_query($query, $connection);
$totalitems1 = mysql_num_rows($result);
Ответ №4:
Как и другие, проблема в том, что вы вызываете mysql_fetch_array()
один раз, в строке после $result = mysql_query( ...
, прежде чем перейти в свой while
цикл. Это берет первую строку из ваших результатов, но вы никогда ничего с ней не делаете. Затем, когда вы запускаете цикл while, вы вызываете mysql_fetch_array()
снова, но поскольку вы уже взяли первую строку, она начинается со второй строки.
Ответ №5:
хорошо, вы должны понять, почему он игнорирует 1 строку, давайте посмотрим $row = mysql_fetch_array($result) или die(mysql_error()); этот код уже извлекает вашу 1-ю строку, а затем вы выполняете выборку в цикле, чтобы он указывал строку после того, как строка уже извлечена.
$limit = 15; // Set limit to show for pagination
$page = $_GET['page']; // get page number from submit
if($page)
$start = ($page - 1) * $limit; // first item to display on this page
else
$start = 0; // if no page var is given, set start to 0
$query = "SELECT PartyMstr.PartyMstrID, UserName, FirstName, LastName, XrefPartyRoleID
FROM PartyMstrRole, PartyMstr
WHERE PartyMstr.PartyMstrID = PartyMstrRole.PartyMstrID amp;amp;
PartyMstrRole.XrefPartyRoleID = 1
ORDER BY LastName, FirstName ASC
LIMIT $start, $limit
";
$result = mysql_query($query, $connection);
$row = mysql_fetch_array($result) or die(mysql_error());
$totalitems1 = mysql_num_rows($result);
?>
<center><h3> Admin User List </h3></center>
<?php
echo "<table border="1" align="center">";
echo "<tr><th>PartyMaster ID</th>";
echo "<th>UserName</th>";
echo "<th>Last, First</th>";
echo "<th>Link</th></tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr><td>";
echo $row['PartyMstrID'];
echo "<td>";
echo $row['UserName'];
echo "<td>";
echo " " . $row['LastName'] . ", " . $row['FirstName'] . " ";
echo "<td>";
echo "<a href = "http://www.505575.com/editUser.php?id=" . $row['PartyMstrID'] . "" >Edit</a>";
// echo "<td>";
// echo $row['XrefPartyRoleID'];
echo "</td></tr>";
}
echo "</table><br/><br/> ";
$paginaton = getPaginationString( $page, $totalitems, $limit,
$adjacents = 1,
$targetpage = "adminUserList.php",
$pagestring = "?page="
); // Functon found in functions.php
echo $paginaton;
?>
</td>