Php 查询失败:错误:类型日期的输入语法无效:“第5行:其中合并之间的日期(“”::日期,'01-01-1990'::日期)
这里我的sql查询有一个小问题。但我真的不知道该怎么办。 我在下面也写了这个查询,这样你们就可以理解如何解决这个错误了。 我们一定会感激立即的帮助 列att_date的类型在postgres数据库中定义为带时区的时间戳 谢谢Php 查询失败:错误:类型日期的输入语法无效:“第5行:其中合并之间的日期(“”::日期,'01-01-1990'::日期),php,sql,postgresql,sql-injection,Php,Sql,Postgresql,Sql Injection,这里我的sql查询有一个小问题。但我真的不知道该怎么办。 我在下面也写了这个查询,这样你们就可以理解如何解决这个错误了。 我们一定会感激立即的帮助 列att_date的类型在postgres数据库中定义为带时区的时间戳 谢谢 select (select emp_code ||' - '||first_name ||' '||last_name from person where person_id = da.person_id) as emp, att_date, timein, timeo
select (select emp_code ||' - '||first_name ||' '||last_name from person where person_id = da.person_id) as emp, att_date, timein, timeout, totalhrs,
totalothrs, isholiday, (select element_name from elements where element_id = da.element_id) as leavetype,daily_attendance_id
from daily_attendance da
where att_date between coalesce('$prd_st'::date,'01-01-1990'::date) and coalesce('$prd_end'::date,'12-31-4712'::date)
and ad_client_id = $_SESSION[clientid]
order by 3;";
直接原因:空字符串和空字符串之间的混淆
与NULL不同
合并NULL,“01-01-1990”::日期为01-01-1990。合并,“01-01-1990”:“日期”是一个错误,它将准确地发出您收到的错误消息:
回归=选择合并,'01-01-1990'::日期;
错误:日期类型的输入语法无效:
第1行:选择合并,'01-01-1990':日期;
^
从psql独立运行时
如果需要NULL,请写入NULL,而不是
根本原因:糟糕的编码实践
阅读并修复代码以使用或。PHP程序员通常称之为准备好的语句,尽管参数化查询更准确
这不仅可以解决您的问题,还可以消除代码中巨大的安全漏洞
永远不要在SQL中插入字符串。如果有人欺骗你的应用程序,比如说,通过直接发布、修改表单等方式发送';每日出勤率下降表;-你会很生气的
提示:如果您将PHP null值传递给pg_query_params或PDO参数绑定方法,它将作为数据库null传递。因此,在使用绑定参数预处理语句时,您不需要输入NULL关键字。请告诉我该怎么做。.我应该如何修改查询以便删除错误。如果有变量/参数,prd_st和$prd_end是什么,您在哪里声明的?看起来$prd_st是空的。prd_st和prd_end我从会话中获取,并使用以下代码获取它们。$prd_st=@$_get['std']$prd_end=@$_GET['end']$prd_st=@$_GET['std']$prd_end=@$_GET['end'];