使用PDO显示来自MySQL表的多行



我有一个名为" competitions "的表,其中包含用户创建的竞赛。每行有5列:id,标题,描述,说明和用户名。ID是将用于永久链接的比赛的ID,标题将显示在比赛页面和用户的"我的比赛"页面,说明将显示在比赛页面,用户名将显示在比赛页面。我用它来确定谁创建了每个比赛。

我有麻烦显示所有用户的比赛在他/她的"我的比赛"页面。它给了我这个错误:

警告:C:xampphtdocscpcontest imy-contest .php 109行的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行1警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'1警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行1警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'1警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行T警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'T警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行T警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'T警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行t警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description't警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行t警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description't警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行d警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'd警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行d警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'd警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'title'C:xampphtdocs cpcompetitions imy- competitions .php第110行C警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'C警告:第109行C:xampphtdocs cpcontest_i my- contest_php中的非法字符串偏移'id'警告:非法字符串偏移'title'在C:xampphtdocscpcontest imy-contest .php在109行C:xampphtdocscpcontest imy-contest .php在110行C警告:C:xampphtdocs cp imy- .php第111行中的非法字符串偏移'description'C

我代码:

        <?php
    $table = $config['mysql']['contest_table'];
    $query = $db->con->prepare("SELECT * FROM {$table} WHERE username=:username");
    $query->bindValue(':username', $_SESSION['username']);
    if($query->execute()) {
        $rows = $query->fetch();
        if(count($rows) > 0) {
            foreach($rows as $row) {
                echo "<h3><a href='contests.php?id=" . $row['id'] . ">" . $row['title'] . "</a></h3>";
                echo "<p>" . $row['end_date'] . "</p>";
                echo "<p>" . $row['description'] . "</p>";
                echo "<br />";
            }
        } else {
            echo "<p>You haven't created any contests yet. <a href='create.php'>Create one now</a>.</p>";
        }
    }
    ?>

这是我第一次使用PDO -我只是从mysql_*函数中跳了出来。

编辑:我更新了我的代码,错误现在消失了。它只显示关于第二场比赛的信息。

<?php $table = $config['mysql']['contest_table']; $query = $db->con->prepare("SELECT * FROM {$table} WHERE username=:username"); $query->bindValue(':username', $_SESSION['username']); if($query->execute()) { $rows = $query->fetchAll(); var_dump($rows); if(count($rows) > 0) { foreach($rows as $row) { echo "<h3><a href='contests.php?id=" . $row['id'] . ">" . $row['title'] . "</a></h3>"; echo "<p>" . $row['end_date'] . "</p>"; echo "<p>" . $row['description'] . "</p>"; echo "<br />"; } } else { echo "<p>You haven't created any contests yet. <a href='create.php'>Create one now</a>.</p>"; } } ?>

fetch应该在while循环中使用,像这样

while($row = $query->fetch(PDO::FETCH_ASSOC)) {
 //..
}

如果您想使用foreach循环,请使用fetchAll()

$rows = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row) {
//...
}

这是因为fetch()一次得到一条记录,而fetchAll()一次得到所有记录。因此,使用fetch(),游标需要在每次循环迭代时移动一行。

在你的foreach使用$rows['id']等,这将帮助你摆脱"警告:非法字符串偏移'id'在"Warning

最新更新