<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 방법을 보여주는 방법은 다음과 같습니다 PHP 사용 mysqli 여러 데이터베이스 연결을 설정하고 문자 세트를 확인하십시오</span></span><span>
</span><span><span class="hljs-comment">// 알아채다:이 부분은 텍스트와 관련이 없습니다,예를 들어</span></span><span>
</span><span><span class="hljs-variable">$mysqli1</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">"user1"</span></span><span>, </span><span><span class="hljs-string">"pass1"</span></span><span>, </span><span><span class="hljs-string">"db1"</span></span><span>);
</span><span><span class="hljs-variable">$mysqli2</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">"user2"</span></span><span>, </span><span><span class="hljs-string">"pass2"</span></span><span>, </span><span><span class="hljs-string">"db2"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli1</span></span><span>->connect_error || </span><span><span class="hljs-variable">$mysqli2</span></span><span>->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-comment">// 연결된 두 개의 문자 세트 이름을 인쇄합니다</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"연결하다1캐릭터 세트:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli1</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>() . PHP_EOL;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"연결하다2캐릭터 세트:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli2</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>() . PHP_EOL;
</span><span><span class="hljs-meta">?></span></span><span>
---
</span><span><span class="hljs-comment"># 존재하다多个数据库연결하다下如何使用 mysqli::character_set_name 确保캐릭터 세트一致?</span></span><span>
존재하다 PHP ~의 Web 개발 중,我们经常会同时연결하다多个数据库。예를 들어,데이터베이스는 사용자 데이터를 저장합니다,다른 데이터베이스는 로그 또는 보고서에 사용됩니다。존재하다这种情况下,如果不同~의数据库연결하다使用了不一致~의캐릭터 세트,이로 인해 차량 코드가 저장되고 읽을 수 있습니다.、비정상적이거나 안전 위험。그러므로,합리적인 사용 **`mysqli::</span><span><span class="hljs-variable constant_">character_set_name</span></span><span>`** 来检测并统一캐릭터 세트,是保障系统稳定性~의重要一环。
</span><span><span class="hljs-comment">## 1. `mysqli::character_set_name` ~의作用 </span></span><span>
`mysqli::</span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>()` 方法用于返回当前연결하다所使用~의캐릭터 세트名称。它不会改变캐릭터 세트,체크 포인트를 제공하십시오。그것에 의해,我们可以존재하다运行时确认数据库연결하다~의캐릭터 세트是否符合预期。
예:
```php
</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">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"dbname"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>(); </span><span><span class="hljs-comment">// 예를 들어:utf8mb4</span></span><span>
</span></span>
실제 프로젝트에서는 일반적인 문제가 다음과 같습니다.
데이터베이스 A는 UTF8MB4 및 데이터베이스 B 기본값을 LATIN1 로 사용합니다.
문자 세트는 삽입 중에 명시 적으로 지정되지 않으므로 크로스 스토어 데이터에서 코드가 잘 알려져 있습니다.
서로 다른 연결의 혼합 문자 세트, 비교 및 정렬에서 예외를 던집니다.
이러한 숨겨진 위험은 각 연결이 확립 된 직후에 문자를 확인함으로써 피할 수 있습니다.
연결할 때 문자 세트를 지정하십시오
<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">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"dbname"</span></span><span>);
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_charset</span></span><span>(</span><span><span class="hljs-string">"utf8mb4"</span></span><span>);
</span></span>
이것은 연결이 항상 필요한 문자 세트를 사용하도록합니다.
점검 중에 문자 _set_name을 사용하여 확인하십시오
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>() !== </span><span><span class="hljs-string">"utf8mb4"</span></span><span>) {
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_charset</span></span><span>(</span><span><span class="hljs-string">"utf8mb4"</span></span><span>);
}
</span></span>
이렇게하면 서버 구성이 다르 더 있어도 응용 프로그램 계층이 통합 상태로 유지되도록합니다.
여러 연결의 통합 검증
<span><span><span class="hljs-variable">$connections</span></span><span> = [</span><span><span class="hljs-variable">$mysqli1</span></span><span>, </span><span><span class="hljs-variable">$mysqli2</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$connections</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$conn</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>() !== </span><span><span class="hljs-string">"utf8mb4"</span></span><span>) {
</span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_charset</span></span><span>(</span><span><span class="hljs-string">"utf8mb4"</span></span><span>);
}
}
</span></span>
힘 문자 세트를 지정하십시오 . 데이터베이스 서버의 기본 설정에 의존하지 않고 연결 직후에 Set_Charset을 호출하십시오.
모니터링 및 로깅 : 개발 또는 테스트 환경에서 로깅은 arribution_set_name 의 반환 값을 통해 수행되어 환경이 일관되도록 할 수 있습니다.
팀 계약 : 다중 대사 프로젝트에서는 잠재적 인 문제를 줄이기 위해 통합 문자 세트 표준이 명확하게 합의됩니다 (일반적으로 UTF8MB4 ).
여러 데이터베이스 연결 시나리오에서 MySQLI :: Character_Set_Name은 현재 연결된 문자 세트를 확인하는 편리한 방법을 제공합니다. SET_CHARSET 의 사용과 함께 크로스 라이브러리 작업에서 캐릭터 일관성을 효과적으로 보장 할 수 있으므로 차별화 된 코드 및 호환성 문제를 피할 수 있습니다. 이는 멀티 스토어 시스템에서 무시할 수없는 세부 사항이며 데이터 정확도 및 응용 프로그램 안정성을 보장하는 핵심 단계이기도합니다.
<span></span>
관련 태그:
mysqli