PDO 사용 여부/필수:null 값을 바인딩할 때 PARAM_NULL?
PDO를 사용하여 SQL 쿼리를 준비할 때 다음 작업을 수행해야 합니까?
$query->bindValue('column', $value, is_null($value) ? PDO::PARAM_NULL : PDO::PARAM_STR);
아니면 그냥 쓸 수도 있고PDO::PARAM_INT
또는PDO::PARAM_STR
직접, PDO가 스스로 알아내기 때문에? (제 생각에는 정말 그래야 할 것 같습니다.
그리고 궁금해서 물어보는 질문입니다만, 만약 제가 이걸 사용하지 않는다면PDO::PARAM_NULL
, 실제로 무엇을 위한 것인가?
아니요, 사용할 필요가 없습니다.PDO::PARAM_NULL
임의의 타입으로 NULL을 바인드하면 PDO는 내부적으로 NULL을 사용합니다.값은 문자열, 숫자 또는 다른 유형으로 변환되지 않습니다.NULL은 NULL인 채로 있습니다.
유형을 다음과 같이 설정하면PDO::PARAM_NULL
값을 NULL로 설정하는 것과 같습니다.PDO::PARAM_NULL
는, 다른 타입의 NULL과 바인드 했을 때에 같은 결과를 얻을 수 있기 때문에, 쓸모가 없습니다.
다음 문장은 모두 리터럴 NULL 값을 바인드합니다.
$str = 'someString';
$stmt->bindParam(1, $str, PDO::PARAM_NULL);
$str = null;
$stmt->bindParam(1, $str, PDO::PARAM_STR);
$stmt->bindValue(1, null);
이론적으로 PDO는 다음 사항을 인식해야 합니다.
$value = NULL;
$query->bindValue('column', $value, PDO::PARAM_STR);
저장하다NULL
(문자열 아님)'NULL'
,도 아니다''
)를 스테이트먼트에 추가합니다.특히, 이 시스템은 다음 정보를 생성할 수 있어야 합니다.
UPDATE ... SET `column` = NULL;
상기의 바인드로부터.
이 경우, 당신의 코드는 '오버킬'입니다.
PDO의 개념은 하나의 API를 사용하여 서로 다른 데이터베이스와 통신할 수 있다는 것입니다. 즉, 한 API가 다른 데이터베이스와 다르게 값을 처리할 수 있다는 것입니다.예를 들어 MySQL은 정수 유형 열의 값을 정수 및 문자열로 모두 처리할 수 있습니다.
INSERT INTO table (col_type_int) VALUES (1)
INSERT INTO table (col_type_int) VALUES ('1')
이 쿼리는 MySQL에서 두 가지 모두 올바르게 실행되지만 다른 데이터베이스가 더 구체적일 수 있습니다.
그렇게PDO::PARAM_TYPE
는 쿼리에 다른 수준의 엄격함을 추가하여 쿼리가 다른 데이터베이스 유형에 대해 올바르게 변환되도록 할 뿐입니다.현재 소스 코드에서 사용되는 값은 다음과 같습니다.PDO_PARAM_STR
,PDO_PARAM_INT
그리고.PDO_PARAM_BOOL
나머지 것들은 그냥 문자열로 변환됩니다.
추가에 의해PDO::PARAM_NULL
쿼리에는 다른 방식으로 처리하는 다른 드라이버(아직 존재하지 않을 수도 있음)를 사용하는 경우에만 코드를 변경할 필요가 없으며 쿼리만 변경할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/42035496/should-must-i-use-pdoparam-null-when-binding-a-value-that-is-null
'sourcecode' 카테고리의 다른 글
Python 문자열에서 특정 문자 제거 (0) | 2022.11.16 |
---|---|
마리아DB / Python의 이모티콘 문제 (0) | 2022.11.16 |
jQuery를 사용한 addClass/removeClass 애니메이션 생성 (0) | 2022.11.16 |
Content Security Policy(CSP; 콘텐츠보안정책)의 구조 (0) | 2022.11.16 |
모키토 모조 오브젝트가 다음에 호출되었을 때 다른 것을 반환하도록 지시하려면 어떻게 해야 합니까? (0) | 2022.11.16 |