sql正确,但在PHP中它跳过第一个结果

时间:2015-06-13 09:05:42

标签: php sql arrays foreach

我使用它:foreach ($result as $row) { $row["testID"], $row["subject"], ... };输出所有值。
sql工作正常,但是当我转到页面时,它总是向我显示所有输出而没有数组中的第一个元素。
例如,如果我向用户显示5个测试,它只显示测试2,3,4和5,但不显示数组$result.中的第一个测试
这是所有的代码(对不起荷兰语):

require_once( "common.inc.php" );
    require_once( "DataObject.class.php" );

    class StatistiekAanpassen extends DataObject {
        public function toetsen() {
            $conn = parent::connect();

            $order = isset( $_GET["order"] ) ? preg_replace( "/[^ a-zA-Z]/", "", $_GET["order"] ) : "toetsID";

            /*SQL om alle toetsen op te halen*/
            $sql = "SELECT toetsID, onderwerp, puntentotaal, vak 
                    FROM Toets 
                    WHERE NOT EXISTS 
                        (SELECT * 
                        FROM LeerlingToets 
                        WHERE Toets.toetsID = LeerlingToets.toetsID AND 
                        LeerlingToets.gebruikerID = " . $_SESSION["member"]->getValue( "gebruikerID" ) . " ) order by " . $order;

            $result = $conn->query($sql);

            if ($result->fetchColumn()) {
                echo "<table id=\"toetsTable\">";
                ?>
                <tr>
                    <th id="toetsTableIDth"><?php if ( $order != "toetsID" ) { ?><a href="statistiekenAanpassen.php?order=toetsID"><?php } ?>Nr<?php if ( $order != "toetsID" ) { ?></a><?php } ?></th>
                    <th id="toetsTableIDth"><?php if ( $order != "onderwerp" ) { ?><a href="statistiekenAanpassen.php?order=onderwerp"><?php } ?>Onderwerp<?php if ( $order != "onderwerp" ) { ?></a><?php } ?></th>
                    <th id="toetsTableIDth"><?php if ( $order != "vak" ) { ?><a href="statistiekenAanpassen.php?order=vak"><?php } ?>Vak<?php if ( $order != "vak" ) { ?></a><?php } ?></th>
                    <th id="toetsTableIDth"><?php if ( $order != "puntentotaal" ) { ?><a href="statistiekenAanpassen.php?order=puntentotaal"><?php } ?>Puntentotaal<?php if ( $order != "puntentotaal" ) { ?></a><?php } ?></th>
                </tr>
                <?php
                    foreach ($result as $row) {
                        echo "<tr><td class=\"IDtd\"><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["toetsID"] . "</a></td>
                    <td><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["onderwerp"] . "</a></td>
                    <td><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["vak"]. "</a></td>
                    <td><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["puntentotaal"]. "</a></td></tr>";
                    }
                echo "</table>";
            } else {
                echo "<p>Er zijn nog geen toetsen.<p>";
                echo "<p>OF<p>";
                echo "<p>U heeft voor alle toetsen al punten ingegeven.<p>";
            }
        }
    }


如何输出所有元素,也是第一个元素?

2 个答案:

答案 0 :(得分:3)

很可能是$ result-&gt; fetchColumn()已经获取了第一条记录,并使其为foreach循环“不可用”。
您可以使用标志变量来“检查”此迭代是否是第一个,如果是,则打印表头。并且通过此标志循环检查后是否至少打印了一条记录,如果没有打印错误消息。

或者你从for(每个)循环切换到do-while循环,让循环体打印“previous”记录的内容,即已经在if-condition中“取出”的记录或者“在”上一次迭代的while条件内。

if ( !($row=$result->fetchRow()) ) { // or whatever the method to fetch one record is called
    echo "
        <p>Er zijn nog geen toetsen.<p>
        <p>OF<p>
        <p>U heeft voor alle toetsen al punten ingegeven.<p>
    ";
}
else {
    // <-- put table tag and table header here -->

    do {
        // <-- print the current table row here -->
    }
    while(  $row=$result->fetchRow() ); // again: or whatever the method to fetch one record is called

    // <-- close the table tag here  -->
}

(并且可能有一个倒带/重置方法将记录指针设置回开始之前,以便foreach将再次遍历第一个记录。)

答案 1 :(得分:2)

fetchcolumn使第一列不可用,请使用

$result->fetch_assoc()