현재 위치: > 최신 기사 목록> mysqli_stmt :: send_long_data 함수는 무엇입니까? 기본 사용 및 예방 조치는 무엇입니까?

mysqli_stmt :: send_long_data 함수는 무엇입니까? 기본 사용 및 예방 조치는 무엇입니까?

gitbox 2025-08-28

mysqli_stmt :: send_long_data 함수는 무엇입니까? 기본 사용 및 예방 조치는 무엇입니까?

PHP의 MySQLI Extension에서 MySQLI_STMT :: Send_Long_Data는 빅 데이터 (예 : 큰 텍스트, 큰 이진 데이터 등)를 MySQL 데이터베이스로 전송하는 데 사용되는 기능입니다. 대규모 데이터 삽입을 처리 할 때 종래의 BIND_PARAM () 메소드는 데이터 크기에 따라 제한 될 수 있으며 Send_Long_Data () 가 특히 중요합니다. 이 기사에서는 MySQLI_STMT :: Send_Long_Data 의 기본 사용법과 사용할 때 예방 조치를 소개합니다.

1. 기능 프로토 타입

 <span><span>mysqli_stmt::</span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$param_nr</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ param_nr : 전송 될 데이터의 매개 변수 번호입니다. 그것은 위치에 해당합니까 ? SQL 명령문의 자리 표시자는 0부터 시작합니다.

  • $ 데이터 : 전송 할 빅 데이터, 일반적으로 큰 문자열 또는 이진 데이터를 나타냅니다.

반환 값 : 성공시 사실 , 실패에 대한 거짓 .

2. send_long_data 의 시나리오를 사용하십시오

Send_long_data는 주로 많은 양의 데이터를 MySQL 데이터베이스로 전송하는 데 사용됩니다. 일반적으로 mysqli_stmt :: bind_param ()은 매개 변수를 바인딩하는 데 사용되지만 데이터 양이 큰 경우 (예 : 큰 파일의 내용, 큰 텍스트 필드 등) PHP 구성 파일의 max_allowed_packet 에 의해 제한됩니다. 이 제한을 피하기 위해 Send_long_data 메소드를 사용하여 MySQL 데이터베이스에 데이터 청크를 전송할 수 있습니다.

3. 기본 사용

다음 구조의 테이블이 있다고 가정합니다.

 <span><span><span class="hljs-keyword">CREATE</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> files (
    id </span><span><span class="hljs-type">INT</span></span><span> AUTO_INCREMENT </span><span><span class="hljs-keyword">PRIMARY</span></span><span> KEY,
    name </span><span><span class="hljs-type">VARCHAR</span></span><span>(</span><span><span class="hljs-number">255</span></span><span>),
    file_data LONGBLOB
);
</span></span>

이 표에서 파일 이름과 해당 파일 바이너리 데이터를 저장합니다. 다음 단계를 통해 큰 파일 데이터를 삽입합니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 데이터베이스 연결을 만듭니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);

</span><span><span class="hljs-comment">// 연결을 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"연결이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// 준비하다 SQL 성명</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO files (name, file_data) VALUES (?, ?)"</span></span><span>);

</span><span><span class="hljs-comment">// 첫 번째 매개 변수를 바인딩합니다(파일 이름)</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>);

</span><span><span class="hljs-comment">// 파일 데이터를 읽습니다</span></span><span>
</span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-string">'large_file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$fileData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>);

</span><span><span class="hljs-comment">// 빅 데이터를 보내십시오</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$fileData</span></span><span>);

</span><span><span class="hljs-comment">// 设置파일 이름</span></span><span>
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>);

</span><span><span class="hljs-comment">// 구현하다 SQL 성명</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();

</span><span><span class="hljs-comment">// 연결을 닫으십시오</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

위의 코드에서는 bind_param () 메소드를 통해 파일 이름 ( s를 문자열 유형을 나타냅니다)을 바인딩합니다. 파일 데이터는 send_long_data () 메소드를 통해 전송되므로 큰 파일 데이터를 전송할 수 있습니다.

4. send_long_data 의 작동 메커니즘

  • Chunks로 데이터를 보내십시오 : Send_long_data는 Chunks의 MySQL에 데이터를 전송하며 전통적인 bind_param () 처럼 모든 데이터를 한 번에 바인딩하지 않습니다. 데이터가 크면 Send_Long_Data를 사용하면 과도한 메모리 사용량과 PHP 실행 시간 제한을 피할 수 있습니다.

  • 빅 데이터 유형 지원 : Send_Long_Data는 주로 대형 파일을 업로드하거나 삽입 할 때 LongBlob 및 LongText 유형의 데이터 전송에 주로 사용됩니다.

  • 매개 변수 번호 : send_long_data는 매개 변수 번호를 사용하여 전송할 데이터 블록을 식별합니다. 숫자는 0에서 시작되므로 Send_Long_Data를 여러 번 호출하면 올바른 매개 변수 번호를 보장해야합니다.

5. 주목할만한 것들

  1. MySQL 구성 제한 사항 : send_long_data를 사용할 때 MySQL 구성에서 max_allowed_packet 매개 변수의 크기에주의를 기울여야합니다. 전송 된 데이터 가이 한계를 초과하면 삽입이 실패합니다. 다음 SQL 문을 통해 현재 구성을 확인할 수 있습니다.

     <span><span><span class="hljs-keyword">SHOW</span></span><span> VARIABLES </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'max_allowed_packet'</span></span><span>;
    </span></span>

    이 값을 변경 해야하는 경우 MySQL 구성 파일에서 수정할 수 있습니다.

     <span><span><span class="hljs-attr">max_allowed_packet</span></span><span>=</span><span><span class="hljs-number">64</span></span><span>M
    </span></span>
  2. PHP 구성 제한 사항 : 또한 PHP 구성 파일의 upload_max_filesizepost_max_size 매개 변수는 파일 업로드의 크기를 제한 할 수 있습니다. send_long_data를 사용하는 경우 이러한 구성이 충분히 커야합니다.

  3. 데이터베이스 연결의 시간 초과 설정 : Send_Long_Data는 빅 데이터를 청크로 전송하므로 장기 데이터베이스 작업은 연결 시간 초과를 유발할 수 있습니다. MySQL 또는 PHP의 시간 초과 설정을 조정하여 피할 수 있습니다.

  4. 데이터 전송 순서 : send_long_data 의 Call 순서는 바인딩 매개 변수 순서와 일치합니다. 여러 호출이 이루어지면 매번 전송 된 데이터가 올바른 매개 변수 번호에 해당하는지 확인하십시오.

6. 요약

mysqli_stmt :: send_long_data는 매우 실용적인 기능입니다. 특히 큰 파일이나 빅 데이터를 삽입해야 할 때 기존 매개 변수 바인딩 방법의 한계를 효과적으로 해결할 수 있습니다. 이 기능을 합리적으로 사용하면 메모리 또는 전송 시간 초과가 불충분 한 문제를 피하면서 빅 데이터를 원활하게 삽입 할 수 있습니다. 그러나 데이터 전송이 제한되지 않도록 MySQL 및 PHP의 관련 구성에주의를 기울여야합니다.