数据库
首页 > 数据库> > php-选择然后立即删除mysql记录

php-选择然后立即删除mysql记录

作者:互联网

我有一个运行SELECT查询的PHP脚本,然后立即删除该记录.有多台计算机正在ping相同的php文件并从同一表中获取数据.每个远程计算机都在cron作业上运行.

我的问题是,由于某些计算机在同一时间ping通,因此有时无法足够快地删除.

我的问题是,我如何从数据库中选择一条记录,并在下一台计算机将其删除之前将其删除.目前,我只是添加了一个短暂的延迟,但是效果不是很好.我尝试使用交易,但我认为它不适用于这里.

这是我的脚本的示例片段:

<?php

$query = "SELECT * FROM `queue` LIMIT 1";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){
    $email = $row['email'];
    $campaign_id = $row['campaign'];
}

$queryx = "DELETE FROM `queue` WHERE `email` = '".$email."'";
$resultx = mysql_query($queryx) or die(mysql_error());

?>

非常感谢您的帮助.

解决方法:

将您的删除查询放入while循环中,以防万一您想从选择中增加限制.

<?php
$query = mysql_query("SELECT * FROM `queue` LIMIT 1") or die(mysql_error());

while($row = mysql_fetch_array($query)){
    mysql_query("DELETE FROM `queue` WHERE `email` = '" . $row['email'] . "' LIMIT 1") or die(mysql_error());
}
?>

上面的代码与运行相同:

mysql_query("DELETE FROM `queue` LIMIT 1") or die(mysql_error());

请小心使用删除查询,如果电子邮件字段为空白,它将删除所有具有空白电子邮件的行.将LIMIT 1添加到您的删除查询中,以避免删除多行.

要添加随机延迟,您可以在脚本顶部添加sleep,

例如:

<?php
$seconds = mt_rand(1,10);
sleep($seconds);
?>

标签:php,mysql,sql-delete,select,transactions
来源: https://codeday.me/bug/20191010/1887155.html