Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询失败:错误:类型日期的输入语法无效:“第5行:其中合并之间的日期(“”::日期,'01-01-1990'::日期)_Php_Sql_Postgresql_Sql Injection - Fatal编程技术网

Php 查询失败:错误:类型日期的输入语法无效:“第5行:其中合并之间的日期(“”::日期,'01-01-1990'::日期)

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

这里我的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, 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'];