gpt4 book ai didi

php - 使用 PHP PDO 在 MySQL 中查询 DATE

转载 作者:行者123 更新时间:2023-11-29 02:47:03 25 4
gpt4 key购买 nike

我正在更新我的代码以使用 PHP PDO...我遇到了一个 sql 查询

 $sql = "SELECT COUNT(id) AS number_of_item FROM ".$db_table_prefix."item_table 
WHERE id > 0
AND date_visited BETWEEN
CAST('$start_date' AS DATE )
AND CAST('$end_date' AS DATE )";

我用这个代替

$this->sql = "SELECT COUNT(id) AS number_of_items FROM item_table
WHERE id > :id AND date_visited
BETWEEN CAST(:start_date AS DATE )
AND CAST(:end_date AS DATE )";
$this->prepare($this->sql);
$this->bind(':id', 0);
$this->bind(':start_date', $date_start);
$this->bind(':end_date', $date_end);

$this->execute();

sizeof($this->multiple_fetch()) > 0 ? $this->result_set = $this->multiple_fetch() : $this->result_set = 404;

return $this->result_set;

我的数据库中有符合所有条件的条目,但我的新代码给出了这个结果

array (size=1)   0 => 
array (size=1)
'number_of_items' => int 0

我的问题是,我做错了什么吗?有没有更好的方法或不同的方法来使用

CAST(... AS DATE)

在 PDO 中?

UPDATE

这是我的绑定(bind)方法的样子

function bind($placeholder, $value, $type = null){
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = \PDO::PARAM_INT;
break;
case is_bool($value):
$type = \PDO::PARAM_BOOL;
break;
case is_null($value):
$type = \PDO::PARAM_NULL;
break;
default:
$type = \PDO::PARAM_STR;
}
}
$this->stmt->bindValue($placeholder, $value, $type);
}

我的 $date_start 和 date_end 值分别是 2016-11-01 和 2016-11-30。我的数据库(item_table)中有大约 101 个虚拟条目,date_visited 为 2016-11-18

最佳答案

正如我在评论中所建议的,您可以使用此代码:

$date_start = date('Y-m-d', strtotime($start_date));
$date_end = date('Y-m-d', strtotime($date_end));

将你的变量内容转换成MySQL需要的格式

现在当你说你以前做过但它不起作用时,我假设在这个转换和将它们绑定(bind)到 sql 语句 之间的某个地方你在你的代码中改变它们,所以你要么可以在绑定(bind)它们之前立即转换它们,或者按照您的建议在绑定(bind)中转换它们,如下所示:

$this->bind(':start_date', date('Y-m-d', strtotime($start_date)));

然后您的查询将如下所示

$this->sql = "SELECT COUNT(id) AS number_of_items FROM item_table
WHERE id > :id AND date_visited
BETWEEN :start_date
AND :end_date";

总而言之,您可以使用这两种方式中的一种。它们中的任何一个都应该工作,但您可以使用您更熟悉的任何一个:

<强>1。在绑定(bind)之前转换变量

$date_start = date('Y-m-d', strtotime($start_date));
$date_end = date('Y-m-d', strtotime($date_end));

$this->sql = "SELECT COUNT(id) AS number_of_items FROM item_table
WHERE id > :id AND date_visited
BETWEEN :start_date
AND :end_date";
$this->prepare($this->sql);
$this->bind(':id', 0);
$this->bind(':start_date', $date_start);
$this->bind(':end_date', $date_end);
// rest of your code

<强>2。在绑定(bind)期间转换变量

$this->sql = "SELECT COUNT(id) AS number_of_items FROM item_table
WHERE id > :id AND date_visited
BETWEEN :start_date
AND :end_date";
$this->prepare($this->sql);
$this->bind(':id', 0);
$this->bind(':start_date', date('Y-m-d', strtotime($start_date)));
$this->bind(':end_date', date('Y-m-d', strtotime($date_end)););
// rest of your code

关于php - 使用 PHP PDO 在 MySQL 中查询 DATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40698346/

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