Php 运行mysqli查询的条件语句

Php 运行mysqli查询的条件语句,php,mysqli,conditional-statements,Php,Mysqli,Conditional Statements,我正在使用的这个脚本从数据库检索电子邮件,如果它们满足任何条件,将发送一封电子邮件,并更新数据库,说明已发送电子邮件 我可以让脚本来做这件事,但我不能让它迭代数组中的所有电子邮件。它将为一封电子邮件运行脚本,然后会出现错误:对非对象调用成员函数execute()。因此,我从中了解到,当foreach循环在另一封电子邮件上迭代时,该变量中没有任何内容可供查询插入数据库 如果我通过刷新页面再次运行脚本,它将插入在上一次调用中没有插入的电子邮件,但在数组中的下一封电子邮件中会出现相同的错误 所以我的问

我正在使用的这个脚本从数据库检索电子邮件,如果它们满足任何条件,将发送一封电子邮件,并更新数据库,说明已发送电子邮件

我可以让脚本来做这件事,但我不能让它迭代数组中的所有电子邮件。它将为一封电子邮件运行脚本,然后会出现错误:对非对象调用成员函数execute()。因此,我从中了解到,当foreach循环在另一封电子邮件上迭代时,该变量中没有任何内容可供查询插入数据库

如果我通过刷新页面再次运行脚本,它将插入在上一次调用中没有插入的电子邮件,但在数组中的下一封电子邮件中会出现相同的错误

所以我的问题是:如何让我的脚本迭代数组中的所有电子邮件而不出错?

date_default_timezone_set('America/Los_Angeles');
$today = date('m/d/Y h:i:s a');

$time = time();

require('addrow_info.php');
//connect to database
$mysqli = new mysqli('localhost', $username, $password, $database);
if(!$mysqli){
die('Not connected :' . mysqli_error($mysqli));
}

$query = $mysqli->query("SELECT * FROM abandoned WHERE orderStatus IS NULL ORDER BY time DESC");
if(!$query){
die('Invalid query :' . mysqli_error($mysqli));
}

while($email = mysqli_fetch_array($query)){

$abandoned[] = array(
    'email' => $email['email'],
    'time' => $email['time'],
    'status' => $email['orderStatus'],
    'attempts' => $email['attempts']
    );
}

$mysqli->close();

//open new connection
$mysqli = new mysqli('localhost',$username,$password,$database);
if(!$mysqli){
 die('Not connected : ' . mysqli_error($mysqli));
}

foreach($abandoned as $viewAbandoned){

$timeAbandoned = strtotime($viewAbandoned['time']);

if($timeAbandoned < strtotime('-1 hour') && $viewAbandoned['attempts'] == '0'){

    echo "Order by " . $viewAbandoned['email'] . " was abandoned more than 1 hour ago<br/>";

    //send email to remind them of items in their cart
    $to = 'josan.iracheta@gmail.com';
    $subject = 'new abandoned email';
    $message = $viewAbandoned['email'];

    $sendmail = mail($to,$subject,$message);

        if(!$sendmail){
            echo "Mail not sent!";
            }
            else{
            echo "Mail sent!";

            //update database with email attempt

             $update = $mysqli->query("UPDATE abandoned SET attempts = '1' WHERE email = '".$viewAbandoned['email']."' ");
             $updateResult = $update->execute();

            }//end if Mail was sent, database was updated with attempt

    }//end if abandoned cart is more than 1 hour old

    //if email has been sent once, send after 6 hours
    elseif($timeAbandoned < strtotime('-6 hours') && $viewAbandoned['attempts'] == '1'){

    //send email to remind them of items in their cart
    $to = 'josan.iracheta@gmail.com';
    $subject = 'new abandoned email';
    $message = 'Second notice ' . $viewAbandoned['email'];

    $sendmail = mail($to,$subject,$message);

        if(!$sendmail){
            echo "Mail not sent!";
            }
            //if mail is sent
            else{
            echo "Mail sent!";

            //update database with email attempt

             $update = $mysqli->query("UPDATE abandoned SET attempts = '2' WHERE email = '".$viewAbandoned['email']."' ");
             $updateResult = $update->execute();

            }//end if Mail was sent
            //database was updated with attempt

    }

    //send email after 24 hours
    elseif($timeAbandoned < strtotime('-24 hours') && $viewAbandoned['attempts'] == '2'){

    //send email to remind them of items in their cart
    $to = 'josan.iracheta@gmail.com';
    $subject = 'new abandoned email';
    $message = 'third notice' . $viewAbandoned['email'];

    $sendmail = mail($to,$subject,$message);

        if(!$sendmail){
            echo "Mail not sent!";
            }
            else{
            echo "Mail sent!";

            //update database with email attempt

             $update = $mysqli->query("UPDATE abandoned SET attempts = '3' WHERE email = '".$viewAbandoned['email']."' ");
             $updateResult = $update->execute();

            }//end if Mail was sent
            //database was updated with attempt

    }

    //send email after one week
    elseif($timeAbandoned < strtotime('-168 hours') && $viewAbandoned['attempts'] == '3'){

    //send email to remind them of items in their cart
    $to = 'josan.iracheta@gmail.com';
    $subject = 'new abandoned email';
    $message = 'It has been one week already' . $viewAbandoned['email'];

    $sendmail = mail($to,$subject,$message);

        if(!$sendmail){
            echo "Mail not sent!";
            }
            else{
            echo "Mail sent!";

            //update database with email attempt

             $update = $mysqli->query("UPDATE abandoned SET attempts = '4' WHERE email = '".$viewAbandoned['email']."' ");
             $updateResult = $update->execute();

            }//end if Mail was sent
            //database was updated with attempt

    }

}//end foreach loop
date\u default\u timezone\u set('America/Los\u Angeles');
$today=日期('m/d/Y h:i:s a');
$time=time();
require('addrow_info.php');
//连接到数据库
$mysqli=newmysqli('localhost',$username,$password,$database);
如果(!$mysqli){
die('未连接:'。mysqli_错误($mysqli));
}
$query=$mysqli->query(“在orderStatus为空ORDER BY time DESC的情况下选择*);
如果(!$query){
die('无效查询:'。mysqli_错误($mysqli));
}
while($email=mysqli\u fetch\u数组($query)){
$array[]=array(
'email'=>$email['email'],
'time'=>$email['time'],
'status'=>$email['orderStatus'],
“尝试次数”=>$email[“尝试次数”]
);
}
$mysqli->close();
//打开新连接
$mysqli=newmysqli('localhost',$username,$password,$database);
如果(!$mysqli){
die('未连接:'。mysqli_错误($mysqli));
}
foreach($放弃为$VIEW放弃){
$timeaudden=strotime($viewaudden['time']);
如果($timeaudded;
//发送电子邮件提醒他们购物车中的物品
$to='josan。iracheta@gmail.com';
$subject='新放弃的电子邮件';
$message=$viewserved['email'];
$sendmail=mail($to,$subject,$message);
如果(!$sendmail){
回显“邮件未发送!”;
}
否则{
回音“邮件已发送!”;
//尝试用电子邮件更新数据库
$update=$mysqli->query(“更新放弃的设置尝试数='1',其中email='””$viewUndered['email'].“”);
$updateResult=$update->execute();
}//如果发送了邮件,则结束,并尝试更新数据库
}//如果弃置的车龄超过1小时,则结束
//如果电子邮件已发送一次,请在6小时后发送
elseif($timepreduredquery(“更新放弃的设置尝试数='2',其中email='””$viewUndered['email'].“”);
$updateResult=$update->execute();
}//如果邮件已发送,则结束
//已尝试更新数据库
}
//24小时后发送电子邮件
elseif($timeauddedquery(“更新放弃的设置尝试数='3',其中email='””$viewUndered['email'].“”);
$updateResult=$update->execute();
}//如果邮件已发送,则结束
//已尝试更新数据库
}
//一周后发送电子邮件
elseif($timepreduredquery(“更新放弃的设置尝试数='4',其中email='”。$viewUndered['email'].“”);
$updateResult=$update->execute();
}//如果邮件已发送,则结束
//已尝试更新数据库
}
}//结束foreach循环

我相信当你的程序点击你的
$updateResult=$update->execute()时,它正在崩溃行,因为
$mysqli->query()
对于成功的DML查询返回true

我相信,如果您删除带有execute调用的行,应该可以解决您的问题


如果要保留执行行,需要将
query()
更改为
prepare()

为什么要关闭数据库连接,然后再次打开?您试图从第一个查询中检索的任何内容都将在下一个查询中丢失。@Fred ii-我关闭了它,因为我将获取的数据保存到了一个数组中。我应该在if/elseif语句之后执行查询吗?
$mysqli->query()
已经在执行您的查询了<代码>e