2014-09-14 5 views
0

는이 같은 데이터베이스에 개체를 추가하려고 :Ruby pg gem을 사용하면 잠재적 인 null 값을 데이터베이스에 추가하는 가장 좋은 방법은 무엇입니까?

DB.exec("INSERT INTO patients (name, birthdate) VALUES ('#{name}', '#{birthdate}');") 

문제는 이러한 값 중 하나가 전무 경우, 데이터가 잘못 저장됩니다 또는 구문 오류가있을 것입니다.

if 문을 사용하여 각 값이 nil인지 아닌지에 따라 다른 SQL 문을 보낼 수 있지만이 방법은보기 흉한 것처럼 보이고 더 나은 방법을 알고 싶습니다.

+0

하나 또는 둘 모두 값이 'NULL'인 경우 수행 할 작업은 무엇입니까? 자리 표시 자 값으로 삽입을 실행 하시겠습니까? 다른 문을 완전히 실행 하시겠습니까? 아니요? – khampson

답변

0

사용 prepare은 자리에 준비된 문을 작성합니다 :

DB.prepare('new_patient', 'insert into patients (name, birthdate) values ($1, $2)') 

참고이 너무

이 ... 바인드 매개 변수 등 $ 1, $ 1, $ 2로 표현되는 숫자 매개 변수를 사용하는 , SQL 쿼리 내부.

? 매개 변수는 익숙하지 않을 수 있습니다.

나서 exec_prepared 준비된 문을 실행 사용하고, 파라미터 값을 제공 : 그것은 명시적인 배열 파라미터를 원하는대로 exec_prepared

DB.exec_prepared('new_patient', [ name, birthdate ]) 

인터페이스 약간 이상한.

이제 name.nil? 일 경우 name 열에 NULL이 표시되고 birthdate.nil? 일 경우 birthdate 열에 NULL이 표시됩니다.

#{...}을 SQL 문 안에 쓰는 경우, 거의 항상 더 안전하고 안전한 방법이 있다고 생각하십시오.