如何同时将短信发送到所有数据库条目

时间:2018-12-09 13:30:22

标签: php

我有一个供款表格,我希望在单击“提交”按钮时将储蓄供款,取款和总余额发送给每个成员,但是每次单击按钮时,都将存储储蓄,取款和总余额。在数据库中,但SMS仅发送给数据库中的最后一个成员。如何使每个成员都能收到他/她相应的短信

if (
                !empty($_POST['RegNumber']) && !empty($_POST['Savings']) &&
                is_array($_POST['RegNumber']) && is_array($_POST['Savings']) &&
                count($_POST['RegNumber']) === count($_POST['Savings'])
                    ) {
                $RegNumber_array = $_POST['RegNumber'];
                $savings_array = $_POST['Savings'];
                $asavings_array = $_POST['Accum_Savings'];
                $withdrawer_array = $_POST['Withdrawer'];
                $awithdrawer_array = $_POST['Accum_Withdrawer'];
                $fsavings_array = $_POST['fSavings'];
                $totalb_array = $_POST['Total_Balance'];
                $firstNamem_array = $_POST['FirstName'];
                $phone_array = $_POST['Phone'];
                for ($i = 0; $i < count($RegNumber_array); $i++) {

                    $RegNumber = mysql_real_escape_string($RegNumber_array[$i]);
                    $savings = mysql_real_escape_string($savings_array[$i]);
                    $asavings = mysql_real_escape_string($asavings_array[$i]);
                    $withdrawer = mysql_real_escape_string($withdrawer_array[$i]);
                    $awithdrawer = mysql_real_escape_string($awithdrawer_array[$i]);
                    $fsavings = mysql_real_escape_string($fsavings_array[$i]);
                    $totalb = mysql_real_escape_string($totalb_array[$i]);
                    $firstNamem = mysql_real_escape_string($firstNamem_array[$i]);
                    $phone = mysql_real_escape_string($phone_array[$i]);
//Query fetching user goes there.

2 个答案:

答案 0 :(得分:0)

您的代码不完整。您正在为一个特定用户进行交易,以便将该用户发送出去。如果要发送所有数据库用户,则可以完成。但是数据库中的总条目是多少。例如,如果数据库中有100-1000个用户,可以发送一次,但是如果您有1000万个用户,并且您想发送全部,那么如果服务器没有适当优化,则服务器可能崩溃,并且建议不发送一次所有用户,但是您可以一次运行一些循环,例如一次使用100次,并使用一些标识符将数据库已发送到这些家伙的信息更新到数据库中,并从余额ID开始下一个循环。

例如

   select * from tableA where id > '9999' and status='0' order by id desc limit 100

希望有帮助。

答案 1 :(得分:0)

在这种情况下,对于通过cron或使用并行执行的这种类型的cpu密集/后台作业,我将使用自建的自建脚本并将交付状态保存在自备表中。

Table: SMS_Status
id | balance_id | delivery_status | message | usage
Foreign Keys: balance_id to balance/user table whatever
Primary Key: id
DELIVERY_STATUS: ENUM NOT_SENT, SENDING, DELIVERED

因此,无论如何我都希望特定用户接收短信,我会在该表中插入一个条目:

Insert Into SMS_Status(balance_id,message,usage) VALUES (...)

在每次交付之前,我都会执行:

UPDATE SMS_Status SET delivery_status="SENDING" where id=^some_id^

我将使用分页获取它:

  SELECT balance_id,message FROM SMS_Status where delivery_status="NOT_SENT" order by balance_id desc LIMIT ^some_offset^, ^page_size^

要进行分页,请查看thisthis以及mysql的documentation