我正在使用PHP和PostgreSQL创建API。 这是我使用的查询之一:
SELECT id, email, first_name, last_name, [...] FROM clients WHERE id = ?
专栏" id"是一个整数,我不需要更大的类型。 ?由来自用户的值替换。
但是如果用户发送的整数太大(9999999999999),PostgreSQL会返回错误:
SQLSTATE [22003]:数值超出范围:7 ERROR:value \" 99999999999999999999999 \"超出类型整数的范围
我应该检查PHP逻辑中的溢出吗?
我可以将此错误转为警告吗? 关于MySQL的相同查询不会失败......
谢谢
答案 0 :(得分:3)
“MySQL上的相同查询不会失败”不是一个好建议(除非你在ANSI STRICT模式下运行MySQL)。 MySQL接受0000-00-00
作为日期,将无效条目强制转换为空位等等,并且通常最多会发出警告,告诉您它已损坏您的数据。
那就是说,我希望PostgreSQL提供版本的类型转换函数,返回错误代码/返回null,所以我可以显式地写:
INSERT INTO mytable(blah) VALUES (bigint_in_nullifinvalid('99999999999999999'));
但是,它没有。
你可以在PL / PgSQL中编写这样的函数,但效率不高,而且没有内置函数。
虽然我很高兴PostgreSQL不会在没有被要求的情况下破坏我的数据,但有些时候我更愿意在我提出请求时将其破坏我的数据。
一般情况下,最好:
SQLSTATE
返回以查找有关错误的详细信息。PostgreSQL没有任何“插入带警告的无效数据”选项。