![](/img/trans.png)
[英]How to select all emails from mysql table and assign it to $to of mail function in php?
[英]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.