gpt4 book ai didi

php - 在 while 循环内调用 PHP 函数

转载 作者:行者123 更新时间:2023-12-03 23:21:53 25 4
gpt4 key购买 nike

我有一个函数,可以从满足特定 WHERE 条件的表中获取一组特定的用户。

我需要给他们每个人发送一条消息。

所以,我使用了另一个函数来发送消息。并在 while 循环之后调用该函数

while($user= mysqli_fetch_assoc($users_set)){
send_message($user['email']);
}

所以,问题是,该函数只被调用一次。 (仅使用循环的最后一个值)

如何解决这个问题并使函数调用循环的每个值...

这是完整的代码...

$query = "SELECT * ";
$query .= "FROM user ";
$query .= "WHERE confirmed = 0";

$user_set = mysqli_query($db_conx, $query);
confirm_query($user_set);

while($user = mysqli_fetch_assoc($user_set)){
send_message($user['email']);
}

这里是发送消息的函数......

function send_message($email){
global $db_conx;

$invitee_user = get_user_by_email($email);

$query5 = "INSERT INTO notification(";
$query5 .= "description, user_id";
$query5 .= ") VALUES(";
$query5 .= "'You have been confirmed'";
$query5 .= ", {$invitee_user['id']}";
$query5 .= ")";

$result5 = mysqli_query($db_conx, $query5);

if($result5){
//$_SESSION["message"] = "Notification sent". \mysqli_error($db_conx);
return "OK";
}else{
//$_SESSION["message"] = "Failed to send notification". mysqli_error($db_conx);
}

}

这是confirm_query()的代码

function confirm_query($result_set){
if(!$result_set){
die("Fatal Error Occured : Database Query Failed <a href=\"error-report.php\">Report this error</a>");
}

}

最佳答案

我会把它归结为一个查询并摆脱所有循环的东西

INSERT INTO notification (description, user_id)
SELECT 'You have been confirmed', user_id
FROM user
WHERE confirmed = 0

你现在的逻辑实在是太复杂了。

您查询用户表以获取用户电子邮件字段,然后将该电子邮件作为参数传递给您的函数,然后再转身(我假设)根据电子邮件查找用户 ID(当您已经从您的初始查询),然后进行插入。

这意味着对于从第一个查询返回的每条记录,您需要执行 2 次查询才能插入到通知表中。因此,如果您有 100 个结果,您最终将总共执行至少 201 次查询才能完成插入。

使用我的方法,无论有多少行受到影响,您都会进行 1 个查询。

您应该从中得到的一个结论是,每当您看到自己尝试进行某种嵌套查询时,您都应该将其识别为反模式(您通常不希望使用的编码模式)。如果您重新考虑如何编写查询,通常可以采取更好的方法。

关于php - 在 while 循环内调用 PHP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com