无法从FOREACH循环中正确显示结果

时间:2014-08-06 19:12:58

标签: php mysql pdo

我将代码切换到PDO,我几乎在那里,除了这个部分,查询的所有结果都应该用foreach语句显示。我知道数据正在被正确获取并正确存储在$ row2中。

我需要做的是从$ results2获取'position'变量并向其添加1,然后运行foreach循环,其中position等于新数字...

在我切换到PDO之前,我的代码运行正常,这确实显示了2个预期的结果:

$cont = $results2[0]->position;;
$cont++;

foreach ($results2 as $resulting) {
if ( $results2[0]->position = $cont )
{
echo "<hr><br><br>" . $resulting->text . "&nbsp;" . "   <b>Suggested by: $resulting-
>display_name </b><br>|<b> <a href=\"$url\">Approve this contribution</a></b> | <b><a
href=\"$url\">delete this suggestion</a></b> |";
}
}

但是现在,foreach只在转换为PDO后两次返回相同的第一个结果,如下所示:

//新的PDO代码 - 没有显示两个结果:

$results2->execute();
$row2 = $results2->fetchAll(PDO::FETCH_ASSOC);

$cont = $row2[0]['position'];
$cont++;

foreach ($row2 as $resulting) {
if ( $row2[0]['position'] == $cont )
{
echo "<hr><br><br>" . $row2[0][text] . "&nbsp;" . "   <b>Suggested by:" . $row2[0]
[display_name] . "</b><br>|<b> <a href=\"$url\">Approve this contribution</a></b> | <b>
<a href=\"$url/?WID=$resulting->WID\">delete this suggestion</a></b> |";
}
}

2 个答案:

答案 0 :(得分:1)

看起来您的旧代码正在获取一个对象数组,而您的新代码正在获取一个数组数组(由PDO::FETCH_ASSOC表示)。

因此,虽然$results2[0]->position曾经工作,但您错误地将其替换为$row2[0][position]。但是,在第二种情况下需要引用position,因为它是一个数组索引。

如果您打开了所有错误报告,则很容易看到这一点。

同样适用于$row2[0][text]$row2[0][display_name]。除了缺少这些索引的引号之外,您可能真的需要$resulting而不是$row[0],因为$row[0]每次循环都会给您相同的值。因此,这些应该更改为$resulting['text']$resulting['display_name']

所以用$row2[0][position]替换$row2[0]['position']的所有实例。另外,请听取John Ruddell的建议。

答案 1 :(得分:0)

注意:这不是一个答案......它只是一种让我澄清我在评论中说的内容的方式,因为它很难在评论中显示代码。

一般如果代码逻辑:

if (true){
    // code will always execute on true
}

if (false){
    // code will never execute on false
}

<强>样品:

$key = "12345";
if($key){
    // will always be executed because this is a true statement. 
}

您的代码:

if ( $row2[0]['position'] = $cont ){
    // will always execute because the assignment is true
}

立即: 抛开所有这些...如果用==运行它时没有发生任何事情,这意味着计数不等于$row[0][position]所以它是一个false语句而if中的代码没有被执行

<强>建议:

尝试在if语句之前添加echo $cont;echo $row2[0]['position'];以查看最新情况。