일반적으로 데이터베이스에는 int 및 varchar 유형의 데이터만 저장합니다. 첫째, 현대 관계형 데이터베이스는 이러한 콘텐츠에 대해 많은 최적화를 수행하고 둘째, 대부분의 인덱스도 필드에 적용할 수 없습니다. 예를 들어, 텍스트 유형 필드는 색인 생성에 적합하지 않습니다. 따라서 데이터베이스를 사용할 때 데이터베이스에 큰 콘텐츠 필드를 저장하는 경우는 거의 없습니다. 하지만 MySQL은 실제로 이러한 유형의 스토리지를 우리를 위해 준비하지만 일반적으로 많이 사용하지는 않습니다.
"대형"은 일반적으로 "약 4kb 이상"을 의미하지만 일부 데이터베이스에서는 데이터가 "대형"에 도달하기 전에 최대 32kb의 데이터를 쉽게 처리할 수 있습니다. 큰 객체는 본질적으로 텍스트이거나 바이너리일 수 있으며 PDOStatement::bindParam() 또는 PDOStatement::bindColumn() 호출에서 PDO::PARAM_LOB 유형 코드를 사용하여 PDO가 큰 데이터 유형을 사용하도록 할 수 있습니다. PDO::PARAM_LOB는 PDO에게 데이터를 스트림으로 매핑하여 PHP Streams API를 사용하여 조작할 수 있도록 지시합니다.
MySQL에서 필드 유형을 blob으로 설정하면 필드가 대형 개체 형식이라는 의미입니다. BindParam() 또는 BindColumn()을 사용할 때 지정된 필드의 매개변수가 PDO::PARAM_LOB 유형인 경우 핸들 형식으로 이 객체의 콘텐츠를 직접 가져와 fopen(처럼 계속 작업할 수 있습니다. ).
아아아아테스트용 데이터 테이블입니다. Attach 필드는 상대적으로 큰 Blob 유형인 longblob 유형으로 설정되어 있어 더 많은 정보를 저장할 수 있습니다. 결국 오늘날의 사진이나 파일은 몇 MB에서 수십 MB까지 쉽게 시작할 수 있으므로 간단한 테스트를 위해 가장 큰 blob 유형을 직접 사용합니다. Tinyblob의 크기는 255바이트, Blob 유형의 크기는 65k, Mediumblob은 16M, Longblob은 4G입니다.
빅데이터 객체를 직접 직접 조작하여 결과가 어떤지 살펴보겠습니다.
아아아아필드를 먼저 바인딩하지 않고 fopen()으로 연 파일을 blob 필드에 직접 저장합니다. 데이터베이스에서 Blob 관련 필드는 "Resource id #6" 형식의 문자열만 저장하는 것을 볼 수 있습니다. 즉 아무런 처리도 하지 않고 $fp 핸들을 문자열 타입으로 강제하고, 핸들 타입을 강제로 적용한 결과는 리소스 ID만 출력되고, 블롭은 캐릭터 타입만 같게 되는 것이다. 필드입니다. 이 문자열은 방금 기록되었습니다.
다음으로 올바른 자세, 즉 BindParam()을 통해 데이터를 삽입하고, BindColumn()을 통해 데이터를 읽는 방법을 살펴보겠습니다.
<code>CREATE TABLE `zy_blob` (<br> `id` int(11) NOT NULL AUTO_INCREMENT,<br> `attach` longblob,<br> PRIMARY KEY (`id`)<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;<br></code>
먼저, binParam()을 통해 데이터를 바인딩하고 PDO::PARAM_LOB 유형을 지정한 후 정상적으로 파일 핸들의 바이너리 내용을 데이터베이스에 삽입합니다. 다음으로, 바인딩열()을 사용하고 PDO::PARAM_LOB 유형도 지정하여 쿼리된 데이터를 가져옵니다. 조회된 필드 정보를 직접 출력해 보면 바이너리 형태의 내용임을 알 수 있습니다. 마지막으로 이 바이너리 콘텐츠를 다른 이름의 파일에 저장합니다.
위 내용은 PDO가 MySQL에서 빅데이터 객체를 작동하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!