【问题标题】:SELECT emails and on number of emails returned insert new row another table PHP MYSQL选择电子邮件并在返回的电子邮件数量上插入新行另一个表 PHP MYSQL
【发布时间】:2020-12-10 20:52:34
【问题描述】:

当数据库中有多个电子邮件时,它只返回一封电子邮件。我想选择所有电子邮件并将它们复制到新表中。


$qry5 = $con->prepare("SELECT email from ssrod.emails where WebformId = ? AND Agency_Id = ?");
        $qry5->bind_param("ss", $WebformIdToCopy, $_SESSION['AgencyId']);
        $qry5->execute();
        $qry5->store_result();
        $qry5->bind_result($copiedEmail);
        $qry5->fetch();
        $numberOfEmail = $qry3->num_rows;
        $counter = 0;
        if ($qry5->num_rows > 0) {
            for($i = 0; $i<$numberOfEmail; $i++) {
                $qry6 = $con->prepare("INSERT INTO ssrod.emails (WebformId, Agency_Id, LOBId, email ) values (?,?,?,?)");
                $qry6->bind_param("ssss", $newAddedWebformId , $_SESSION['AgencyId'], $LOBId, $copiedEmail);
                $qry6->execute();
            }
        }

【问题讨论】:

  • 只用while而不是for
  • 我在添加for循环之前使用while结果是一样的
  • 你需要遍历 fetch() 也许这里的例子可以帮助你:php.net/manual/en/mysqli-stmt.fetch.php
  • 谢谢@Baracuda078。我单击并按照 while 循环的步骤进行操作,并在我的 while 循环代码中使用了 fetch 两次(不是我们上面的那个),但与 Adyson 评论的相同......
  • 我无法理解这个问题的标题。

标签: php mysql sql for-loop while-loop


【解决方案1】:

无论实际返回的行数是多少,您只会看到 $copiedEmail 的一个值,因为您只看到一次 fetch() - fetch 一次只返回一行。

删除$qry5-&gt;fetch();,然后用while ($qry5-&gt;fetch()) { 替换for($i = 0; $i&lt;$numberOfEmail; $i++) {,你应该会得到更好的结果。 if ($qry5-&gt;num_rows &gt; 0) { ... } 包装器也应该是多余的——如果没有返回行,它就不会进入循环。

完整示例:

$qry5 = $con->prepare("SELECT email from ssrod.emails where WebformId = ? AND Agency_Id = ?");
$qry5->bind_param("ss", $WebformIdToCopy, $_SESSION['AgencyId']);
$qry5->execute();
$qry5->bind_result($copiedEmail);

while ($qry5->fetch()) {
  $qry6 = $con->prepare("INSERT INTO ssrod.emails (WebformId, Agency_Id, LOBId, email ) values (?,?,?,?)");
  $qry6->bind_param("ssss", $newAddedWebformId , $_SESSION['AgencyId'], $LOBId, $copiedEmail);
  $qry6->execute();
}

注意上述说明解释了您的问题的技术原因。但是,正如this answer shows,实际上根本不需要使用 2 个单独的查询,因此您的大部分代码实际上都不是必需的,而且这个问题根本不需要出现。

【讨论】:

  • 感谢问题是在第 5 行获取的。我删除了它并使用了它工作的代码。谢谢
  • @NatnaelS 没问题。但也请参阅 Gordon Linoff 的回答,因为它实际上是整个场景的更简洁的解决方案 - 为什么在可以使用 1 时使用 2 查询?附言请记住选择对您最有用的答案并将其标记为“已接受”(单击该答案旁边的勾号,使其变为绿色) - 请参阅stackoverflow.com/help/someone-answers 了解更多信息。谢谢:-)
【解决方案2】:

不要使用循环!

INSERT INTO ssrod.emails (WebformId, Agency_Id, LOBId, email ) 
    SELECT ?, ?, ?, email 
    FROM ssrod.emails 
    WHERE WebformId = ? AND Agency_Id = ?;

您似乎了解参数。接下来,始终使用它们!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多