我将代码切换到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 . " " . " <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] . " " . " <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> |";
}
}
答案 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'];
以查看最新情况。