PHP에서 MySQL 데이터베이스를 사용할 때 MySQLI_Result :: Fetch_Column 함수는 쿼리 결과에서 데이터 열을 쉽게 얻을 수 있습니다. PHP의 반복자 패턴과 결합하여 대형 데이터 세트를 효과적으로 가로 지르고 메모리 사용을 최적화 할 수 있습니다. 이 기사는 mysqli_result :: fetch_column 및 반복자 패턴을 사용하여 효율적인 데이터 트래버스를 달성하는 방법을 설명합니다.
반복자 패턴은 컬렉션의 기본 표현을 노출시키지 않으면 서 일관된 방식으로 컬렉션을 반복 할 수있는 설계 패턴입니다. PHP의 반복자 인터페이스는 네 가지 기본 방법을 제공합니다.
current () : 현재 요소를 반환합니다.
key () : 현재 요소의 키 이름을 반환합니다.
다음 () : 내부 포인터를 다음 요소로 이동하십시오.
유효한 () : 유효한 요소가 있는지 확인하십시오.
PHP에서 mysqli_result :: fetch_column 함수를 사용하면 쿼리 결과 열에서 데이터를 얻을 수 있습니다. 지정된 열의 모든 값을 포함하는 배열을 반환합니다. 사용량은 다음과 같습니다.
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-variable">$columnData</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_column</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// 데이터의 첫 번째 열을 얻으십시오</span></span><span>
</span></span>
Fetch_column을 직접 사용하여 모든 데이터를 얻으면 모든 결과 세트를 한 번에로드하므로 데이터가 클 때 많은 메모리가 소비됩니다. 효율성을 향상시키기 위해, 특히 데이터 볼륨이 크면 PHP의 반복자 모드로 데이터를 점차적으로로드 할 수있어 메모리를 절약하고 처리 속도를 향상시킬 수 있습니다.
반복자 패턴을 통해 데이터를 효율적으로 처리하기 위해 반복자 인터페이스를 구현하기위한 클래스를 만들 수 있습니다. 이 클래스는 mysqli_result 객체를 캡슐화하고 반복기를 통해 각 열의 데이터를 점차적으로 얻습니다.
먼저, 우리는 반복자 인터페이스를 구현하는 mysqliresultiterator 클래스를 만듭니다. 이 클래스는 mysqli_result 객체에서 행으로 데이터 행을 얻을 수 있고 fetch_column 에서 제공 한 데이터를 사용할 수 있습니다.
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">MysqliResultIterator</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">Iterator</span></span><span> {
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$column</span></span><span>;
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>;
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>;
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$result</span></span></span><span>, </span><span><span class="hljs-variable">$columnIndex</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable language_">$this</span></span><span>->result = </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->column = </span><span><span class="hljs-variable">$columnIndex</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->position = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->data = [];
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">rewind</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// 반복자의 위치를 재설정하십시오</span></span><span>
</span><span><span class="hljs-variable language_">$this</span></span><span>->position = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->data = </span><span><span class="hljs-variable language_">$this</span></span><span>->result-></span><span><span class="hljs-title function_ invoke__">fetch_column</span></span><span>(</span><span><span class="hljs-variable">$this</span></span><span>->column);
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">current</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// 현재 데이터를 반환하십시오</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable language_">$this</span></span><span>->data[</span><span><span class="hljs-variable language_">$this</span></span><span>->position];
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">key</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// 현재 요소의 키 이름을 반환합니다</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable language_">$this</span></span><span>->position;
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">next</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// 내부 포인터를 다음 요소로 이동하십시오</span></span><span>
++</span><span><span class="hljs-variable language_">$this</span></span><span>->position;
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">valid</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// 현재 요소가 유효한지 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable language_">$this</span></span><span>->data[</span><span><span class="hljs-variable language_">$this</span></span><span>->position]);
}
}
</span></span>
반복자 클래스가 만들어지면 MySQL 쿼리 결과의 데이터 열을 통해 쉽게 사용하여 반복 할 수 있습니다. 구현 방법은 다음과 같습니다.
<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-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);
</span><span><span class="hljs-comment">// 반복자 인스턴스를 만듭니다,얻다 "id" 열 데이터(열 인덱스입니다0)</span></span><span>
</span><span><span class="hljs-variable">$iterator</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">MysqliResultIterator</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-comment">// 반복하고 모든 것을 출력하십시오 ID 데이터</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$iterator</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: <span class="hljs-subst">$value</span></span></span><span>\n";
}
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>
이 예에서는 MySQLIRESULTITERATOR를 통해 쿼리 결과의 첫 번째 데이터 열을 통과하고 각 ID 행을 행으로 출력합니다. 반복자 모드를 사용하면 전체 메모리 소비 문제를 피하고 전체 데이터 세트를 한 번에로드하지 않고 데이터에 점차 액세스 할 수 있습니다.
반복자 패턴과 결합하여 Fetch_Column 함수는 데이터를보다 효율적으로 얻는 데 도움이 될뿐만 아니라 모든 데이터를 한 번에 메모리에로드하는 대신 단계별로 데이터를 단계별로로드 할 수 있습니다. 이것은 특히 메모리가 제한 될 때 많은 양의 데이터를 처리하는 데 매우 유용합니다.
mysqli_result :: fetch_column 과 php iterator 모드를 결합함으로써 MySQL 쿼리 결과의 효율적인 트래버스를 구현할 수 있습니다. 반복자 모드는 전체 쿼리 결과를 한 번에 메모리에로드하지 않는 메모리 효율적인 방법을 제공합니다. 이 패턴을 사용하면 많은 양의 데이터를 처리하는 동안 코드의 유지 관리 및 성능을 향상시킬 수 있습니다.
관련 태그:
mysqli_result