此代码从我的数据库中提取用户ID并向其发送消息。问题是尝试将消息同时发送给所有用户并且我的数据库发生故障。如果我将它发送给许多用户,我会收到错误。有人可以帮我把它发送给1个用户或2个用户,并且可能会在消息之间延迟几秒钟吗?
$result = mysql_query("
SELECT
*
FROM
offline_access_users
");
if($result){
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
$msg['access_token'] = $row['access_token'];
try {
$facebook->api('/me/feed', 'POST', $msg);
$output .= "<p>Posting message on '". $row['name'] . "' wall success</p>";
} catch (FacebookApiException $e) {
$output .= "<p>Posting message on '". $row['name'] . "' wall failed</p>";
}
}
}
答案 0 :(得分:0)
你需要稍微考虑一下。
首先,您需要在 cronjob 中执行此操作,例如,每5分钟运行一次。
在此之后,您需要了解如何限制邮件更频繁地每人每天发送一次(或您想要的任何限制) - 因此您需要创建一个额外的字段message_sent_date
in你的桌子。
然后,您需要限制每个cronjob运行的用户数量。
// replace mysql with mysqli or PDO !!!
$result = mysqli_query($link, "
SELECT *
FROM offline_access_users
ORDER BY message_sent_date ASC
LIMIT 5
"); // this takes the 5 users that received messages the longest time ago
接下来,在while
循环内,执行此查询(在try块中)。
$updateQuery = "UPDATE offline_access_users SET message_sent_date = CURRENT_TIMESTAMP WHERE id = {$row[id]}";
那应该是它,让我知道它是怎么回事。
结果
此脚本将每5分钟运行一次,并选择5个尚未收到消息的用户(此处的逻辑取决于您的需求,因此您应该更清楚一点。)
答案 1 :(得分:-1)
尝试以下代码:
$offset = 0; //Starting Point
$limit = 2; //Number of records to work with per loop
while(1)
{
$result = mysql_query("
SELECT * FROM offline_access_users LIMIT $offset,$limit
");
if($result){
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
$msg['access_token'] = $row['access_token'];
try {
$facebook->api('/me/feed', 'POST', $msg);
$output .= "<p>Posting message on '". $row['name'] . "' wall success</p>";
} catch (FacebookApiException $e) {
$output .= "<p>Posting message on '". $row['name'] . "' wall failed</p>";
}
}
}
else
break;
$offset = $offset + $limit;
}