通过cron job和php mysql查询实现生日提醒



我已经阅读了关于通过php查询运行的cron作业的其他问题,但我得到的错误似乎是语法特定的,我希望有人能帮助。(我是新手,自学,所以犯愚蠢错误的可能性很高)。

我正在尝试设置一个每天运行一次的cron作业。它的工作是查询位于同一服务器上的mysql数据库中的用户列表,确定是否有人的生日在那天,并将cron作业的响应回发给我。

下面是创建数据库的代码:
CREATE TABLE IF NOT EXISTS test ( sid INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, birthday DATE );
insert into test values(NULL,'Jane Doe','2022-5-17');
insert into test values(NULL,'John Doe','2022-5-20');

这是我的php文件(birthdayChecker.php):

<?php 
$conn = new mysqli('server', 'username', 'password', 'schema');
// Check connection
if ($conn->connect_error) {
die('Connection failed: ' . $conn->connect_error);
}
$result = $conn->query('select Name from test where MONTH(Birthday)=MONTH(CURRENT_DATE) and DAYOFMONTH(Birthday)=DAYOFMONTH(CURRENT_DATE)');
foreach ($result as $birthday)
{
echo 'Heads up: ' . $birthday['Name'] . ' has a birthday today!';
}

我不太确定如何分享cron设置,但是它现在设置为每十分钟运行一次。我知道它在运行,因为我收到了邮件,但这是他们说的:

fullpath/birthdayChecker.php: line 1: ?php: No such file or directory
fullpath/birthdayChecker.php: line 2: syntax error near unexpected token `('
fullpath/birthdayChecker.php: line 2: `$conn = new mysqli('server', 'username', 'password', 'schema');'

特别是考虑到第1行错误,我很确定我只是做了一些愚蠢的事情,但我看不出来。感谢任何帮助!

问题原来是我需要告诉cron作业使用php (shell知道,但cron显然不知道):

php -f fullpath/birthdayChecker.php

还需要对实际的PHP代码进行一些修改才能使其配合:

$query = "select Name from test where MONTH(Birthday)=MONTH(CURRENT_DATE) and DAYOFMONTH(Birthday)=DAYOFMONTH(CURRENT_DATE)";
$result = $conn->query($query)->fetch_all(MYSQLI_ASSOC);
foreach($result as $row)
{
echo "Heads up: " . $row["Name"] . " has a birthday today!";
}

最新更新