2011-12-01 7 views
0

하나의 데이터베이스에서 데이터를 읽고, 포맷하고 재조합하여 다른 데이터베이스에 삽입하는 기능이 있습니다. 그러나 특정 컬럼에 대해 누락 된 데이터가있는 행은 목표 데이터베이스에 의해 거부되어야합니다. 이 작업을 수행하던 방식은 NULL이 될 때 INSERT 문이 실행되지 않도록 대상 테이블의 관련 열에 NOT NULL 제약 조건을 설정하는 것이 었습니다.INSERT 문에 해당하는 PDO :: ATTR_ORACLE_NULLS가 있습니까?

그러나 소스 데이터의 형식화 된 배열을 파싱 할 때 나머지 SQL INSERT 문자열과 즉시 연결할 수 있도록 모든 값에 따옴표를 사용합니다. 필자는 PDO :: ATTR_ORACLE_NULLS 특성을 사용하여 INSERT에서 모든 빈 문자열 (NULL 데이터 원본의 NULL)을 NULL로 변환하려고했지만 이제는 INSERT 문이 아닌 SELECT 쿼리의 결과에만 영향을주는 것으로 보입니다. 누구든지 INSERT 문의 모든 빈 문자열을 NULL로 처리하도록 MySQL 또는 PDO 개체에 우아하고 빠른 방법을 알리는 사람이 있습니까?

답변

1

오라클은 빈 문자열을 NULL로 처리합니다. 이것은 MySQL이하는 것이 아닙니다. 그러나 PDO에 전달하기 전에 대체하려면 array_map(function ($element) { return $element ? $element : NULL; }, $arguments);을 사용할 수 있습니다. (또는 $element === '' ? NULL : $element 처리 방법에 따라 0'0')

+0

실제로 해결할 수없는 경우에 대비하여 해결할 수있는 방법이 될 수 있습니다.하지만이 경우 내 implode ('\ " , \ " ', $ values)보다 덜 우아한 foreach 또는 while 루프를 사용하여 NULL 값이"null "문자열이되지 않도록합니다. – GijsW

관련 문제