sourcecode

PDO 사용 여부/필수:null 값을 바인딩할 때 PARAM_NULL?

copyscript 2022. 11. 16. 21:21
반응형

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

반응형