2012-01-29 2 views
4

PHP PDO를 Postgresql 백엔드와 함께 사용하고 있습니다. 일부 nullable 필드 및 사용자가 HTML 양식 필드에 아무것도 입력 할 때 해당 필드가 아닌 빈 문자열을 NULL을 삽입하려면 (이 일부 내 SELECT 이러한 테이블 나중에 사용 조건 같은 중요합니다. WHERE x는 NULL이 아닙니다).PHP PDO가 빈 potsgresql 대신 NULL을 삽입합니다.

그러나이 버전의 bindParam 코드는 빈 문자열을 NULL 대신 null 입력 가능 필드에 삽입합니다.

$stmt2->bindParam(':title', $title, PDO::PARAM_STR); 

나는 꽤 읽고이 대신 필드에 null를 삽입 할 수있는 대답이라고 파악했습니다 :

$stmt2->bindParam(':title', $title, PDO::PARAM_NULL); 

그러나 이것은 내가 모든 매개 변수를 미리 확인해야 의미 null이 가능한 필드에 전달되어 비어 있는지 확인하고, 그렇다면 PDO_PARAM_STR 대신 PDO :: PARAM_NULL을 전달합니다. 당연히이 작업을 수행 할 수 있지만, 빈 문자열을 만나면 PDO에게 알려주고 대신 null을 삽입하는 설정이 필요할 것으로 기대하고있었습니다.

나는이

$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING); 

를 우연히 발견하지만 아무런 영향을 미치지 않습니다 및 추가 연구와 나는하지의 길에, 이것은 단지 나가는 길에 대한 기록에 영향을 생각하고 있어요.

모든 옵션 다른 변수를 사전 점검하는 것보다? 당신이 널 원하는 경우

덕분에 아론

답변

6

, 단지 대신 빈 문자열의 null 삽입합니다.

$stmt2->bindParam(':title', $title === '' ? null : $title, PDO::PARAM_STR); 
+0

고마워,이 얼굴을 보니 분명했다. (나무 숲을 볼 수 없다 ....) – Alpaus

1

xdazz의 더 적절한 대답 외에, 당신은 종종 SQL에서 이런 일을 해결할 수 있습니다 : 그냥 INSERT INTO ... VALUES (NULLIF(?, '')) 같은 것으로 쿼리 INSERT INTO ... VALUES (?)을 바꿔.

관련 문제