【问题标题】:Preventing selecting the same data over and over again from a php mysql database防止从 php mysql 数据库中一遍又一遍地选择相同的数据
【发布时间】:2016-06-14 19:50:45
【问题描述】:

我下面的代码应该从 db 中选择数据,然后使用变量发送 SMS。我正在使用 cron 作业来执行脚本。问题是,当 cron 运行时,它还会选择已经处理过的数据。有人请指导我如何防止选择已经处理过的数据......

    //should select the fresh or new data after the first run
    $sql = "SELECT name, amount, trans_id, msisdn, time_paid FROM customer";


    $result1 = mysqli_query($conn, $sql);
    $resultarr = mysqli_fetch_assoc($result1); // fetch data


            $name = $resultarr['name'];
            $amount = $resultarr['amount'];
            $transaction_id = $resultarr['trans_id'];
            $date = $resultarr['time_paid'];

             //message template
            $message = "Dear $name we have received $amount from you. MPESA transaction Id $transaction_id on $date.";

        $mobilenumber = $resultarr['msisdn']; // get mobile number from array
        $message_sent = $message;

            $serviceArguments = array(
                            "mobilenumber" => $mobilenumber,
                            "message" => $message_sent
            );

            $client = new SoapClient("http://32.138.160.130:8080/smsengine/smsws?WSDL"); 

【问题讨论】:

  • 在表格中添加一列,说明是否已发送 SMS,并添加 WHERE thisNewColumn = false 或类似名称。
  • 你好。我该怎么做呢?我的表中有一个状态列,我该怎么做?请... @JonStirling

标签: php mysql cron


【解决方案1】:

为短信状态添加新列。与 sms_sent 一样,此列的默认值为 0,当成功发送 sms 时,将 sms_sent 值从 0 更改为 1。 然后sql查询是: $sql = "SELECT name, amount, trans_id, msisdn, time_paid FROM customer WHERE sms_sent= 0";


    //should select the fresh or new data after the first run
    $sql = "SELECT id, name, amount, trans_id, msisdn, time_paid FROM customer";


    $result1 = mysqli_query($conn, $sql);
    $resultarr = mysqli_fetch_assoc($result1); // fetch data


            $name = $resultarr['name'];
            $amount = $resultarr['amount'];
            $transaction_id = $resultarr['trans_id'];
            $date = $resultarr['time_paid'];

             //message template
            $message = "Dear $name we have received $amount from you. MPESA transaction Id $transaction_id on $date.";

        $mobilenumber = $resultarr['msisdn']; // get mobile number from array
        $message_sent = $message;

            $serviceArguments = array(
                            "mobilenumber" => $mobilenumber,
                            "message" => $message_sent
            );

            $client = new SoapClient("http://32.138.160.130:8080/smsengine/smsws?WSDL"); 
$sq = "UPDATE customer SET notification = 1 WHERE id = $resultarr['id']";

【讨论】:

  • 谢谢。假设我在桌子上的“0”列设置了“通知”,我应该有...$sql = "SELECT name, amount, trans_id, msisdn, time_paid FROM customer WHERE notification = 0";,然后在发送短信后我应该有$sq = "UPDATE customer SET notification = 1 WHERE notification = 0"; 对吗?那么在插入一些其他数据后,通知集是否会恢复为 0 以便我可以选择?请......@Kuldeep
  • @Bob Myles 不喜欢那样 "$sq = "UPDATE customer SET notification = 1 WHERE notification = 0";"每次短信发送后更新表,并借助该表的唯一 ID(主键)进行更新。
  • 好吧,和我的情况一样,主键是“id”……我没让你好,请详细说明
  • 使用下面的 sql 查询 $sql = "SELECT id, name, amount, trans_id, msisdn, time_paid FROM customer" 获取数据的 ID;在特定的“id”上使用下面的 sql 查询更新表 $sq = "UPDATE customer SET notification = 1 WHERE id = $resultarr['id']";
猜你喜欢
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 2019-07-05
  • 2011-10-30
相关资源
最近更新 更多