【问题标题】:nested mysqli_query gives no results back嵌套的 mysqli_query 没有返回结果
【发布时间】:2015-11-18 18:30:19
【问题描述】:

在下面的这段代码中,我需要回显子查询的结果。 当我回显$row['email'].'<br>'; 时,回显工作正常,我收到了所有电子邮件。

问题是这样的:

$resultsub.echo $rowb["email"];

是空的

问题:我在子查询中做错了什么:$resultsub?

$result = mysqli_query($conn, "SELECT * FROM wp_mm_email_bounces");

if ($result) {
// output data of each row
while( $row = mysqli_fetch_assoc( $result ) )
        {
            echo $row['email'].'<br>'; // echo works okay
            $resultsub =  mysqli_query($conn, "SELECT * FROM `wp_mm_external_emails` WHERE `email` = '". $row['email'] ."' "); 
            // when I echo this subquery it runs ok. but somehow I get an empty
            while( $rowb = mysqli_fetch_assoc( $resultsub) )
            {
                echo $rowb["email"];
        } else {
            echo "0 $resultsub";
            }
} else {
echo "0 results";
}

【问题讨论】:

  • 在数据库管理器(即 phpmyadmin)中执行 resultsub 查询时会得到什么
  • 当我手动填写 $row['email'] 时,我得到了所有。但不知何故,在这个脚本中 $resultsub 保持为空。
  • 我的想法是: - $resultsub = mysqli_query($conn 不正确(不知道为什么不正确) - email var 不正确:WHERE email = '". $row['email '] ."' ");

标签: php mysql arrays mysqli


【解决方案1】:

我认为您以某种方式弄乱了您的 if-elsewhile 部分。如果我“漂亮地打印”您上面的代码 sn-p,它看起来像这样(请参阅我的 cmets):

<?php
$result = mysqli_query($conn, "SELECT * FROM wp_mm_email_bounces");

if ($result) 
{
    while( $row = mysqli_fetch_assoc( $result ) )
    {
        echo $row['email'].'<br>';
        $resultsub =  mysqli_query($conn, "SELECT * FROM `wp_mm_external_emails` WHERE `email` = '". $row['email'] ."' "); 

        while( $rowb = mysqli_fetch_assoc( $resultsub) )
        {
            echo $rowb["email"];
        } 
        else //Where is the corresponding if?
        {
            echo "0 $resultsub";
        }
    }
} //I added this enclosing bracket to the if-statement

else //If this is the corresponding else of your first if at the beginning, then you never closed it
{
    echo "0 results";
}

?>

【讨论】:

    【解决方案2】:

    为什么不使用 INNER JOIN 查询?

    请看下面的例子:

    $sqlString = "SELECT ebounces.email as bouces_email, ext.email as ext_email FROM wp_mm_email_bounces ebouces INNER JOIN wp_mm_external_emails ext ON ebounces.email = ext.email";
    $result = mysqli_query($conn, $sqlString);
    
    if ($result) {
        // output data of each row
        while( $row = mysqli_fetch_assoc( $result ) )
        {
            echo $row['bouces_email'].'<br>'; 
            echo $row["ext_email"];
        }
    } 
    else {
        echo "0 results";
    }
    

    附言。将您需要的所有列放入 SQL 语句中。

    我最好的

    【讨论】:

    • 我用 echo 测试脚本,但需要它来删除。而不是 echo $rowb["email"];我需要这个: $conn->query("DELETE FROM wp_mm_external_emails WHERE email= '".$email."' ");从表格中删除所有退回的电子邮件地址。
    • @Hermants,这听起来像是一个新问题。这不属于 cmets。如果此答案是您根据echo(不是delete from)指定问题的正确答案,请接受。您可以提出一个新问题,并立即考虑询问您真正需要什么。
    • 好的,尝试使用内连接删除,如下面的示例。 $sqlString = "DELETE s.* FROM wp_mm_external_emails s INNER JOIN wp_mm_email_bounces n ON s.email = n.email"; $result = mysqli_query($conn, $sqlString);我的最好成绩
    • 不知道我必须描述得如此明确。我将开始一个新线程。
    • 尝试使用最后一个例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多