如何解决SELECT电子邮件和返回的电子邮件数在另一表中插入新行PHP MYSQL
当数据库中有多个电子邮件时,它仅返回一封电子邮件。我想选择所有电子邮件并将它们复制到新表中。
$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()
一次-提取一次仅返回一行。
删除$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,email ) values (?,?)");
$qry6->bind_param("ssss",$newAddedWebformId,$_SESSION['AgencyId'],$LOBId,$copiedEmail);
$qry6->execute();
}
上面的说明解释了导致问题的技术原因。但是,作为this answer shows,实际上根本没有必要使用2个单独的查询,因此实际上并不需要您的大多数代码,并且根本不需要出现这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。