在while循环中调用PHP函数

时间:2015-05-14 19:43:06

标签: php function loops while-loop

我有一个函数可以从满足特定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>"); 
}

}

1 个答案:

答案 0 :(得分:5)

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

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

你现在的逻辑确实令人费解。

您查询用户表以获取用户电子邮件字段,然后将该电子邮件作为参数传递给您的函数,然后转身(我猜)根据电子邮件查找用户ID(当您已经从中获取此信息时)你的初始查询),然后你插入。

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

使用我的方法,无论受影响的行数是多少,都会进行1次查询。

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