在MySQL/PHP查询中使用GET变量
我正在使用一个名为“class_of”的mysql日期列,该列的日期范围为2014-08-01到2019-08-01,所有格式均为日期。这些日期与一篇文章的写作年份一致 我已经设置了我的php执行页面,通过一个url操作来抓取这一年。 例如,www.mywebsite.com/mypage.php?action=2016在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
$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();