Foreach INSERT查询的最佳方式

时间:2017-02-19 作者:pippo

您好,我有这段代码,它运行得很好,但我认为它使用了大量服务器资源,因为要对存储在组中的每个用户id执行数据库查询,有什么方法可以解决这个问题吗?还有,我如何使用准备好的语句?

$event_start_date = date(\'d-m-Y\', strtotime($new_start_date));
    $notification = "Nuovo evento <span class=\'text-warning\'><strong>$event_title</strong></span> inizia il $event_start_date";
    $notification_status = "0";
    $notification_category= "events";


    $sql = "SELECT user_join_id FROM user_group_join WHERE group_join_id=\'$event_group\'";

    $result= mysqli_query($conn,$sql);

    $datas= array();

    if(mysqli_num_rows($result) > 0){

        while($row=mysqli_fetch_array($result, MYSQLI_ASSOC)){

        $datas[]= $row;

        }

    }

    foreach($datas as $data) {

    $id_cliente = $data[\'user_join_id\'];

    $event_notification = mysqli_prepare($conn, "INSERT INTO user_notifications (notification_sent_by, notification_sent_to, notification_message, notification_time, notification_status, notification_category, notification_category_id) VALUES(?,?,?,now(),?,?,?)");
    mysqli_stmt_bind_param($event_notification, \'iisisi\', $userid, $id_cliente, $notification, $notification_status, $notification_category, $event_id);
    mysqli_stmt_execute($event_notification);
    mysqli_stmt_close($event_notification);

    }
非常感谢你的帮助

1 个回复
SO网友:Matthew Brown aka Lord Matt

此外,您还需要准备语句,使用它,然后在循环的每个步骤中关闭它。那是浪费了很多精力。

准备一次,用于循环,然后在结束时关闭。

$event_notification = mysqli_prepare($conn, "INSERT INTO user_notifications (notification_sent_by, notification_sent_to, notification_message, notification_time, notification_status, notification_category, notification_category_id) VALUES(?,?,?,now(),?,?,?)");
foreach($datas as $data) {
    $id_cliente = $data[\'user_join_id\'];
    mysqli_stmt_bind_param($event_notification, \'iisisi\', $userid, $id_cliente, $notification, $notification_status, $notification_category, $event_id);
    mysqli_stmt_execute($event_notification);
}
mysqli_stmt_close($event_notification);
我希望这会快得多。

我不是mysqli的专家,也不擅长编写语句,但我非常确信您可以将所有数据绑定到一个巨大的数组中,并在一次点击中完成感兴趣的操作。

This SO answer 无论如何,这对我来说是个暗示。考虑到您已经构建了大阵列,您应该能够在没有foreach 把它拆开。这可能更快。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请