簡體   English   中英

SELECT 封電子郵件和返回的電子郵件數量插入新行另一個表 PHP MYSQL

[英]SELECT emails and on number of emails returned insert new row another table PHP MYSQL

它只返回一個 email 而數據庫中有多個。 我想 select 所有電子郵件並將它們復制到新表中。


$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();
            }
        }

不要使用循環!

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

您似乎了解參數。 接下來,總是使用它們!

不管實際返回的行數如何,您只會看到$copiedEmail的一個值,因為您只fetch()一次 - fetch 一次只返回一行。

刪除$qry5->fetch(); 然后將for($i = 0; $i<$numberOfEmail; $i++) {替換為while ($qry5->fetch()) { ,你應該會得到更好的結果。 if ($qry5->num_rows > 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();
}

注意上面的注釋解釋了您的問題的技術原因。 但是,正如這個答案所示,實際上根本不需要使用 2 個單獨的查詢,因此實際上不需要您的大部分代碼,而且這個問題一開始根本不需要出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM