gpt4 book ai didi

postgresql - 为什么我不能在 Postgresql 中使用数字或日期类型输入 NULL 值?

转载 作者:行者123 更新时间:2023-11-29 14:12:20 24 4
gpt4 key购买 nike

我正在为这项工作做一个小申请,它包括一个表格。当使用表单的人没有在数据类型“数字”(比如 PIN 码)中输入值,甚至没有在我的“日期”数据类型字段之一(比如他的周年纪念日)中输入日期时,它会返回我错误如下:

Error Type – Type d'erreur _Microsoft OLE DB Provider for ODBC Drivers (0x80004005)_ ERROR: invalid input syntax for type numeric: ""; Error while executing the query

Error Type – Type d'erreur _Microsoft OLE DB Provider for ODBC Drivers (0x80004005)_ ERROR: syntax error at or near ")"; Error while executing the query

所以看起来当使用表单的人什么都不输入时,它返回字符串“空”即“”。为什么数字类型和数据类型不能将其读取为 NULL 条目?这些字段不是强制性的,因此有时我需要将它们留空。

我怎样才能让它成为可能?他们是继续使用“数字”和“日期”类型的一种方式,以便当用户在这些字段中不输入任何内容时,表格会填满空白,而不是给我这个错误吗?

这是我的sql语句:

trsConn.EXECUTE "INSERT INTO ""TRS"".employeetbl ( "& _
"""firstName"", " & _
"""lastName"" , " & _
"""detContract"", " & _
"sle, " & _
"""posNumber"" "& _
") VALUES (" & _
"'" & Request.Form("empFirst") & "', " & _**
"'" & Replace(Request.Form("empLast"), "'", "`") & "', " & _
"'" & Request.Form("dateContract") & "', " & _
"'" & Request.Form("sle") & "', " & _
"'" & Request.Form("posNum") & "');"

(posNum和dateContract分别是“numeric”和“date”类型

非常感谢您的帮助。期待听到你们这些天才所说的话。

最佳答案

The concept of NULL in SQL is pretty muddled and inconsistent ...但是很明显 ''NULL 不同。

'' 不是 NULL,它是 '',空字符串。您不能将其转换为日期、数字等:

regress=# SELECT CAST('' AS DATE);
ERROR: invalid input syntax for type date: ""
LINE 1: SELECT CAST('' AS DATE);
^
regress=# SELECT CAST('' AS NUMERIC);
ERROR: invalid input syntax for type numeric: ""
LINE 1: SELECT CAST('' AS NUMERIC);
^

一些产品——特别是 Microsoft Access 和旧版本的 MySQL——对这个问题感到困惑。 NULL为NULL,''为空串;他们不是一回事。您不能将一个转换为另一个。

So it seems that when the person using the form enters nothing, it returns the string "empty" that is "". Why can't the numeric type and data type read that as a NULL entry? These fields are not mandatory and so I need to have them be sometimes blank.

那是您的应用程序的工作。当您的应用发现空字符串出现在数字、日期或类似的表单字段中时,它应该将 NULL 发送到数据库,而不是 ''。这通常是在将数据提供给数据库之前从用户输入转换数据的例行部分。您进行此类转换是至关重要的;您永远不应该直接将用户的值直接发送到数据库。

快速搜索表明 asp classic 使用 nullundefined 作为它的 null 值;当某些内容为空时,您应该能够将它们传递到准备好的语句中。

在关于 '' 的错误之后出现语法错误的事实表明您将 SQL 语句构建为字符串,而不是使用 prepared statements with placeholders . (感谢 JayC 的 SO 问题引用)。这是求SQL injection ;换句话说,您的应用程序极度不安全。想象一下如果用户输入“日期”会发生什么:

2012-01-01'); DROP SCHEMA public;--

然后您的应用很乐意将其变成

INSERT INTO sometable (blah, blah, blah) VALUES (1, 2, DATE '2012-01-01'); DROP SCHEMA public;--');

DROP SCHEMA 然后愉快地执行,哇哦,砰的一声,你的数据库就在那里。这也是最愚蠢、最简单的一种 SQL 注入(inject)攻击。

关于postgresql - 为什么我不能在 Postgresql 中使用数字或日期类型输入 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11944899/

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