prepare("SELECT * FROM table WHERE date B-6ren">
gpt4 book ai didi

php - 使用 PHP 通过变量选择日期之间的行

转载 作者:行者123 更新时间:2023-11-29 17:19:52 25 4
gpt4 key购买 nike

我正在尝试使用以下代码获取日期列的值为 7 月的某一天的所有行:

$july="07";
$query=$conn->prepare("SELECT * FROM table WHERE date BETWEEN '2018-?-01' AND '2018-?-31'");
$query->execute($july,$july);
$row=$query->setFetchMode();

我也尝试过这样的:

$july="07";
$month_1="'2018-".$july."-01'";
$month_2="'2018-".$july."-31'";

$query=$conn->prepare("SELECT * FROM table WHERE date BETWEEN ? AND ?");
$query->execute(array($month_1,$month_2));
$row=$query->setFetchMode();

第一种情况,我收到以下错误:

fatal error :未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:参数编号无效:绑定(bind)变量的数量与 file.php 第 35 行的标记数量不匹配”

我认为我收到该错误是因为我不能有“?”在单括号之间的查询中。

第二种情况,我什么也没得到。

用这个解决了它:

SELECT * FROM table WHERE YEAR(date)=2018 AND MONTH(date)=?

最佳答案

查询 1 失败,因为无法引用占位符。

查询 2 失败,因为单引号被驱动程序转义,然后整个转义字符串被引号括起来。大致

date BETWEEN '\'2018-07-01\''

有几种方法可以实现这一目标。

获取日期列的前 7 个值并将其与字符串进行比较。

$date = '2018-07';
...then execute the query like ...
WHERE substr(date, 1, 7) = ?

您还可以使用 concat 方法来防止占位符被引用。

$july="07";
$query=$conn->prepare("SELECT * FROM table WHERE date BETWEEN concat('2018-', ?, '-01') AND concat('2018-', ?, '-31')");
$query->execute(array($july, $july));
$row=$query->setFetchMode();

关于php - 使用 PHP 通过变量选择日期之间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315866/

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