PHP와 PostgreSQL로 API를 만들고 있습니다. 이것은 내가 사용하는 쿼리 중 하나입니다.
SELECT id, email, first_name, last_name, [...] FROM clients WHERE id = ?
"id"열은 정수이며 더 큰 유형이 필요하지 않습니다. ? 사용자로부터 오는 값으로 대체됩니다.
그러나 사용자가 너무 큰 정수 (9999999999999)를 보내면 PostgreSQL은 오류를 반환합니다.
SQLSTATE [22003] : 숫자 값이 범위를 벗어남 : 7 오류 : \ "99999999999999999999999 \"값이 정수 유형의 범위를 벗어났습니다.
PHP 로직에서 오버플로를 확인해야합니까?
이 오류를 경고로 바꿀 수 있습니까? MySQL에 대한 동일한 쿼리가 실패하지 않습니다.
감사합니다
"MySQL에 대한 동일한 쿼리는 실패하지 않습니다"는 좋은 권장 사항이 아닙니다 (ANSI STRICT 모드에서 MySQL을 실행하지 않는 한). MySQL은 0000-00-00
날짜로 받아들이고 잘못된 항목을 장소의 null로 강제 변환하며 종종 데이터가 망가 졌다는 경고를 표시합니다.
즉, PostgreSQL이 오류 코드를 반환하거나 null을 반환하는 형식 변환 함수 버전을 제공했으면 좋겠습니다. 따라서 명시 적으로 작성할 수 있습니다.
INSERT INTO mytable(blah) VALUES (bigint_in_nullifinvalid('99999999999999999'));
하지만 그렇지 않습니다.
PL / PgSQL에서 이러한 함수를 작성할 수 있지만 효율적이지 않고 내장 된 기능이 없습니다.
PostgreSQL이 요청없이 내 데이터를 엉망으로 만들지 않는다는 사실이 정말 기쁘지만, 요청했을 때 데이터를 엉망으로 만들고 싶을 때가 있습니다.
일반적으로 다음을 수행하는 것이 좋습니다.
SQLSTATE
반환을 일치 시켜 오류에 대한 세부 정보를 찾을 수 있습니다 .PostgreSQL에는 "경고와 함께 잘못된 데이터 삽입"옵션이 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다