매일 개발에서는 종종 MySQL 데이터베이스에서 결과 세트를 얻고 결과 세트를 통과해야합니다. 기본적으로 MySQLI_Query 가 반환 한 결과 세트는 쿼리 순서로 저장됩니다. 결과 세트를 원한다면 몇 가지 방법이 있습니다. 간단하고 효율적인 방법 중 하나는 PHP의 mysqli_result :: data_seek 함수를 사용하는 것입니다.
mysqli_result :: data_seek는 PHP가 제공하는 메소드로, 개발자가 결과 세트의 내부 포인터를 지정된 행으로 이동할 수있는 방법입니다. 기본 사용량은 다음과 같습니다.
<span><span>mysqli_result::</span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>$ 오프셋은 0 부터 시작하는 대상 행의 인덱스를 나타냅니다.
반환 값은 부울 유형입니다. True 가 성공적으로 반환되면 False 가 실패하면 False가 반환됩니다.
결과 세트를 역순으로 통과하려면 가장 직접적인 방법은 SQL 쿼리의 DESC로 주문을 사용하지 않고 결과 세트의 마지막 행에서 앞으로 읽는 것입니다. 이렇게하면 특히 데이터 볼륨이 매우 큰 경우 경우 데이터베이스의 압력을 줄일 수 있습니다.
필드 ID 와 이름이 포함 된 MySQL 테이블 사용자가 있다고 가정하고 사용자 목록을 역 순서로 출력하려고합니다.
<span><span><span class="hljs-meta"><?php</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-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">"연결이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-variable">$sql</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">$sql</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>->num_rows;
</span><span><span class="hljs-comment">// 역 순서 트래버스 결과 세트</span></span><span>
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-variable">$num_rows</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> >= </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>--) {
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span>); </span><span><span class="hljs-comment">// 내부 포인터를 $i 좋아요</span></span><span>
</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">", Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"쿼리가 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>$ result-> num_rows 결과 세트의 총 행 수를 얻습니다.
for 루프는 마지막 줄 $ num_rows -1 에서 시작하여 단계별로 전진합니다.
지정된 행을 찾으려면 $ result-> data_seek ($ i) 를 사용하십시오.
현재 행 데이터를 얻으려면 $ result-> fetch_assoc ()을 호출하십시오.
이 방법은 SQL 쿼리 순서를 수정할 필요가 없으며 트래버스 순서를 동적으로 제어하는 일부 시나리오에서는 매우 유용합니다.
이점 :
간단하고 사용하기 쉬우 며 PHP 수준에서 트래버스 순서를 직접 제어하십시오.
작은 결과 세트에 매우 효율적입니다.
참고 :
대규모 결과 세트의 경우 메모리 소비가 너무 높으면 SQL 레이어를 정렬하기 위해 주문을 사용하는 것이 좋습니다.
data_seek는 mysqli_query 가 반환 한 mysqli_result 객체에만 적용되며 쿼리가 아닌 쿼리가 아닙니다.
mysqli_result :: data_seek를 사용하면 SQL의 분류 기능에 의존하지 않고 결과 세트의 역 순서 트래버살을 쉽게 구현할 수 있습니다. PHP 개발자에게보다 유연한 제어 방법을 제공합니다. 특히 쿼리 결과가 동적으로 처리되는 시나리오에 적합합니다.
관련 태그:
mysqli_result