php - 获取搜索日期的问题和输入的日期不正确,dump() 在 POSTMAN 中显示
问题描述
我在搜索$startDate
和范围内的项目时遇到问题$endDate
。当我输入 POSTMAN 时
localhost:8000/api/getprojectbydate?startDate=2019-02-03&endDate=2019-07-04
,我收到了 dump_data 结果是
Expression {#296
#value: "SELECT * FROM `projects` WHERE `startDate` BETWEEN ' + 2019-03-25 00:00:00 + ' AND ' + 2019-06-21 00:00:00 + '"
}
不知何故,查询中未正确显示日期 2019-02-03 和 2019-07-04。执行搜索功能时,这是在我的 HomeController 中
public function getProjectByDate() {
$startDate = Carbon::parse(request('startDate'));
$endDate = Carbon::parse(request('endDate'));
$project = DB::RAW("SELECT * FROM `projects` WHERE `startDate` BETWEEN ' + $startDate + ' AND ' + $endDate + '");
dd($project);
return array($project);
}
任何人都可以帮助解决这个问题,获取参数的值是错误的。谢谢
解决方案
请不要以这种方式使用原始查询语句,因为这是一个安全问题,因为它会使您面临查询注入。
您以您现在的格式获取日期的原因是因为Carbon::parse()
将返回一个Carbon
实例,并且当它被视为一个字符串(即在您的查询中连接)时,它将Y-m-d H:i:s
通过该__toString()
方法转换为格式。
我建议将whereBetween与查询生成器startOrDay()
以及.endOfDay()
Carbon
public function getProjectByDate()
{
$startDate = Carbon::parse(request('startDate'))->startOfDay();
$endDate = Carbon::parse(request('endDate'))->endOfDay();
$project = DB::table('projects')
->whereBetween('startDate', [$startDate, $endDate])
->get();
dd($project);
return [$project];
}
如果您只希望/需要日期包含日期而不是时间,那么您可以使用该format()
方法:
$startDate = Carbon::parse(request('startDate'))->format('Y-m-d');
$endDate = Carbon::parse(request('endDate'))->format('Y-m-d');
推荐阅读
- amazon-dynamodb - 通过管道将 DynamoDB 流传输到 Webhook
- c# - 在 Asp.net Mvc 中存储菜单列表的最佳方式
- unity3d - unity 2018 像素完美相机,我可以放大和缩小吗?
- python - 使用 texttospeech google api 的奇怪行为
- html - 使用 Bootstrap 4 的带有图标的 CSS 三角形按钮
- c++ - 在两个 .cpp 文件之间定义全局类/结构指针
- flutter - 如何在flutter中读取具有类返回类型的HTTP POST请求?
- mysql - mysql:用于全文搜索的 NOT MATCH 与 NOT IN 子查询
- ios - Here Maps - iOS - MSDKUI 根据本地语言更改 ui 元素
- assembly - 如何将操作码转换为十六进制码