在MySQL/PHP查询中使用GET变量

在MySQL/PHP查询中使用GET变量,php,mysql,mysqli,Php,Mysql,Mysqli,我正在使用一个名为“class_of”的mysql日期列,该列的日期范围为2014-08-01到2019-08-01,所有格式均为日期。这些日期与一篇文章的写作年份一致 我已经设置了我的php执行页面,通过一个url操作来抓取这一年。 例如,www.mywebsite.com/mypage.php?action=2016 $classOf = ($_GET["action"]); 我现在需要在mysql查询中以某种方式使用该变量,这样我的php while循环将只回显日期中包含的日期,例如20

我正在使用一个名为“class_of”的mysql日期列,该列的日期范围为2014-08-01到2019-08-01,所有格式均为日期。这些日期与一篇文章的写作年份一致

我已经设置了我的php执行页面,通过一个url操作来抓取这一年。 例如,www.mywebsite.com/mypage.php?action=2016

$classOf = ($_GET["action"]);
我现在需要在mysql查询中以某种方式使用该变量,这样我的php while循环将只回显日期中包含的日期,例如2016年

这就是我尝试过的

这是可行的,但我需要年份作为变量

$query = 'SELECT * FROM news_content 
          WHERE 
            hot = "false" 
            AND trash="false" 
            AND class_of = DATE("2020-08-01") 
          ORDER BY article_id DESC';
我试过下面的方法,但没有成功

$query = 'SELECT * FROM news_content 
          WHERE 
            hot = "false" 
            AND trash="false" 
            AND class_of = DATE("<?php echo $classOf ?>-08-01") 
          ORDER BY article_id DESC';
$query='从新闻内容中选择*
哪里
hot=“false”
和trash=“false”
类别=日期(“-08-01”)
按物品订购_iddesc';

$query='从新闻内容中选择*
哪里
hot=“false”
和trash=“false”
以及“按物品订购”的类别;

$query='从新闻内容中选择*
哪里
hot=“false”和trash=“false”
以及
类似于“%%”按商品id描述排序

$query='选择*
从新闻内容
哪里
hot=“false”和trash=“false”
和类_=
“按物品订购”;

以上所有操作都没有成功。

使用PHP DateTime类获取完整日期,然后准备语句将值传递给SQL

$date = (new DateTime ($_GET['action'] . '08-01'))->format('Y-m-d');
$stmt = $mysqli->prepare ('SELECT * FROM news_content WHERE hot = "false" AND trash="false" AND class_of=? ORDER BY article_id DESC');
$stmt->bind_param('s', $date);
$stmt->execute();
$result = $stmt->get_result();
如果您想从匹配的年份中获取所有记录,那么创建两个PHP日期,dateFrom和dateTo,然后使用


看起来您正试图将PHP代码嵌入到另一个PHP代码中。这是行不通的。您需要研究如何以安全的方式将变量传递到SQL语句中。将提交的字符串直接放入SQL字符串是非常不安全的。然后,您可以使用sql日期格式查找给定年份的值
date\u格式(您的日期列“%Y”)=?
@Gavin您链接到的网站以质量差而闻名。例如,在这个页面上没有选择查询的例子,这是很重要的,因为mysqli编写的语句非常单调乏味。很遗憾,我记得几年前它还不错。这只是我看到的第一个对初学者友好的google结果。为什么要使用日期作为数据类型来存储年份?使用INT,或者YEAR。我在手机上写的,还没有测试过。如果我犯了错误,请告诉我。我不确定他们是否总是将“08-01”作为剩余日期。也许查询中的年份(class_of)会更匹配,尽管不太理想
$query = 'SELECT * FROM news_content 
          WHERE 
            hot = "false" AND trash="false" 
            AND class_of 
             LIKE "%<?php echo $classOf ?>%" ORDER BY article_id DESC
$query = 'SELECT * 
          FROM news_content 
          WHERE 
            hot = "false" AND trash="false" 
            AND class_of = 
            "<?php date("echo $classOf-08-01")?>" ORDER BY article_id DESC';
$date = (new DateTime ($_GET['action'] . '08-01'))->format('Y-m-d');
$stmt = $mysqli->prepare ('SELECT * FROM news_content WHERE hot = "false" AND trash="false" AND class_of=? ORDER BY article_id DESC');
$stmt->bind_param('s', $date);
$stmt->execute();
$result = $stmt->get_result();
$dateFrom = (new DateTime ($_GET['action'] . '01-01'))->format('Y-m-d');
$dateTo = (new DateTime ($_GET['action'] . '12-31'))->format('Y-m-d');

$stmt = $mysqli->prepare ('SELECT * FROM news_content WHERE hot = "false" AND trash="false" AND class_of BETWEEN ? AND ? ORDER BY article_id DESC');
$stmt->bind_param('ss', $dateFrom, $dateTo);
$stmt->execute();
$result = $stmt->get_result();