gpt4 book ai didi

php - 使用 cron 作业每月通过 MySQL SELECT 查询更改 PHP 变量

转载 作者:行者123 更新时间:2023-11-30 00:44:33 24 4
gpt4 key购买 nike

好吧,我有很多分散的拼图碎片。我正在尝试制作一个应用程序,每月更新我网站底部的报价(即“本月报价”)。我正在使用 PHP 访问 MySQL 服务器,MySQL 服务器中包含引号。

在数据库中,该表称为“quotes”,并具有“quote_id”、“quotation”、“author”和“datetime_used”列。 “datetime_used”列的默认值为 1991,我用它来检查去年是否使用过该报价。如果随机选择的报价的时间小于当前时间减去 1 年,则该报价将用作该月的新报价。如果使用报价,则“datetime_used”将更新为当前时间。

我认为要执行的步骤是:1. 运行一个 cron 作业(每月运行一次),该作业运行以下 PHP 脚本:

<?php
//Make connection
$connect = mysqli_connect("localhost","user","password","dbname");

//Check connection
if (mysqli_connect_errno($connect))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

//Run query
//Select random quote
$result = mysqli_query($connect,
"SELECT quotation, author FROM quotes
WHERE datetime_used <= NOW() - INTERVAL 1 YEAR
ORDER BY RAND()
LIMIT 1");

$row = $mysqli_fetch_array($result);
$quote = $row['quotation'];

//Update the datetime_used column to NOW()
mysqli_query($connect,"
UPDATE quotes SET datetime_used=NOW()
WHERE quotation='$quote'");

mysqli_close($connect);
?>

2.然后将上面的 cron 作业脚本生成的 $quote 包含到我的网站代码中:

<footer>
<p>Quote of the month:
<?php
//INCLUDE THE $quote SOMEHOW
echo $quote;
?>
</p>
</footer>

所以我的问题是如何让 cron 作业以某种方式更新 $quote 变量,以便我可以将更新的变量包含到我的网站代码中。或者有更好的方法吗?

编辑:我想出的代码似乎有效。

<?php
//Make connection
$connect = mysqli_connect("localhost","root","root","test");

//Check connection
if (mysqli_connect_errno($connect)) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

//Check for month difference between this month and most recently used quote as well as get the quote and author to store
$check = mysqli_query($connect, 'SELECT MONTH(NOW())-MONTH(datetime_used) AS m, quotation, author FROM quotes ORDER BY datetime_used DESC LIMIT 1');
$checkarray = mysqli_fetch_array($check);
$quote = $checkarray['quotation'];
$author = $checkarray['author'];
//If the month difference if 1 or greater, it selects a new quote
if ($checkarray['m']) {
$result = mysqli_query($connect,
"SELECT quotation, author FROM quotes
WHERE datetime_used <= NOW() - INTERVAL 1 YEAR
ORDER BY RAND()
LIMIT 1");

$row = mysqli_fetch_array($result);
$quote = $row['quotation'];
$author = $row['author'];

//Update the datetime_used column to NOW()
mysqli_query($connect,
"UPDATE quotes SET datetime_used=NOW()
WHERE quotation='$quote' AND author='$author'");
}

mysqli_close($connect);

echo "\"$quote\"
</cite>
-$author";
?>

最佳答案

我认为您所需的步骤过于复杂。您应该只需要:

  • 通过 php,在页面加载时运行查询,检查报价表:
  • 如果当前报价是在过去 30 天内选择的
  • 如果是这样,请使用它
  • 如果不是,请选择日期不在过去一年内的新报价
  • 如果找到,请使用当前日期更新 date_used 列

不需要 Cron 作业。我假设这是一个低流量站点,因此对每个页面访问运行检查不是性能问题。如果您确实需要,您可以使用缓存系统来缓存所选报价,并避免在三十天后检查数据库。

关于php - 使用 cron 作业每月通过 MySQL SELECT 查询更改 PHP 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21494117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com