Php 无法正确显示FOREACH循环的结果

Php 无法正确显示FOREACH循环的结果,php,mysql,pdo,Php,Mysql,Pdo,我将我的代码切换到PDO,我几乎做到了,除了这一部分,其中来自查询的所有结果都应该用foreach语句显示。我知道数据被正确地提取,并且正确地存储在$row2中 我需要做的是从$results2中获取'position'变量并向其中添加1,然后运行foreach循环,其中position等于新的数字 在我切换到PDO之前,我的代码工作得很好,这确实正确地显示了2个预期结果: $cont = $results2[0]->position;; $cont++; foreach ($resul

我将我的代码切换到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> |";
}
}
$cont=$results2[0]>position;;
$cont++;
foreach($results2作为$resulted){
如果($results2[0]->position=$cont)
{
echo“


”$resulting->text.“.”建议者:$resulting- >显示_名称
|||“; } }
但是现在,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> |";
}
}
$results2->execute();
$row2=$results2->fetchAll(PDO::FETCH_ASSOC);
$cont=$row2[0]['position'];
$cont++;
foreach($row2作为$resulted){
如果($row2[0]['position']==$cont)
{
回声“


”$row2[0][text]”。建议者:“$row2[0] [显示名称]。“
|| |"; } }
注意:这不是答案。。。这只是我澄清我在评论中所说的话的一种方式,因为在评论中很难显示代码

通用IF代码逻辑:

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
}
示例:

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
}
您的代码:

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]
,因此这是一个错误语句,并且不会执行if中的代码

推荐:

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
}

尝试放置一个
echo$cont
echo$row2[0]['position']在if语句之前查看发生了什么。

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

因此,当
$results2[0]->position
用于工作时,您错误地将其替换为
$row2[0][position]
。但是,第二种情况下需要引用
位置
,因为它是数组索引

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

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


因此,将
$row2[0][position]
的所有实例替换为
$row2[0][position']
。另外,请注意约翰·鲁德尔的建议。

比较时不应该有两个等号,而不是赋值吗?如果我将=改为==我就不会得到结果。但是如果我把它保持为=那么我得到第一个结果。你知道if语句没有意义吗?你只需要赋值,然后返回true,这样回声就发生了。我要说的是,在我切换到PDO之前,我的代码工作得很好。在我的帖子中的“附加”下查看我的代码,了解在更改为PDO之前是如何工作的。以某种方式添加等号不会返回正确的结果,但不会返回任何结果。我认为问题在于,在执行PDO?Gotchya时,在foreach中定义的结果之间循环时,无法使用$resulting。这是有道理的,但是为什么它在我的原始代码中可以完美地工作呢?除了我必须为PDO重写foreach部分外,没有任何变化…+1漂亮的接球patrick我以为我看到了位置设置为某个值,所以我认为它仍然是一个变量,我想将1添加到$row[position](我在此之前的第一个查询),因此位置变为2。我将添加到$row2[position]现在我需要foreach获取$row2[position]==cont的结果(但我这样做时仍然只返回两个结果中的第一个)。至于[position]vs['position']这两种方法都有效——可能是wordpress的东西?我注意到了“位置”的建议,并设置为==这很奇怪:我得到了两个结果,但同一条记录只显示了两次/重复,而不是显示两条不同的记录。这就好像它知道有两条结果,所以我尝试显示两条,而只是两次显示第一条结果ce…这是因为您正在显示来自
$row2[0]
的值,这些值将始终相同。您可能需要的是
$resulting['text']
$resulting['display\u name']
(注意,您在这些值上也犯了相同的引号错误)@Patrick Q就是这样!我知道我的foreach循环有问题。我不知道我可以接受新定义的$resulting并执行$resulting['text']。太棒了,谢谢。仅供参考,引号是不必要的。两种方式都有效。如果你作为答案发布,我可以接受