Bit(1) 필드의 PDO 문 삽입 이상
PDO 준비된 문을 사용하여 bit(1) 필드에 값을 삽입할 때, 예상치 못한 결과가 발생합니다. 의도한 0 값 대신 데이터베이스는 테이블에 1을 저장합니다.
이러한 예외는 MySQL의 BIT 열의 바이너리 특성으로 인해 발생합니다. 숫자로 분류됨에도 불구하고 바이너리 유형으로 처리되어 특정 클라이언트 라이브러리와 호환성 문제가 발생합니다.
TINYINT(1)
이 문제를 방지하려면 , 대신 TINYINT(1) 열로 전환하는 것을 고려해 보세요. 이 대체 데이터 유형은 BIT(1)와 유사한 저장 요구 사항을 제공하는 동시에 PDO 및 기타 클라이언트 라이브러리와의 호환성 문제를 제거합니다.
bindValue를 PDO::PARAM_INT와 함께 사용
If 열 유형을 변경하는 것은 불가능합니다. 대체 솔루션은 PDO::PARAM_INT 유형 힌트와 함께 바인드값을 사용하는 것입니다. 이 접근 방식은 PDO가 값을 정수로 처리하도록 강제하여 삽입 예외를 해결합니다.
예제 코드
<code class="php">$pdo = new PDO("connection string etc"); $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)'); $statement->bindValue(':someText', "TEST"); $statement->bindValue(':testBool', 0, PDO::PARAM_INT); $statement->execute();</code>
이 해결 방법을 사용하면 삽입 문제가 해결될 수 있습니다. , 향상된 호환성과 잠재적인 성능 이점을 위해 TINYINT(1)로 전환하는 것이 좋습니다.
위 내용은 PDO가 MySQL의 BIT(1) 열에 0 대신 1을 삽입하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!