我有一个名为" 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