현재 위치: > 최신 기사 목록> mysql_fetch_assoc 및 mysql_num_rows 함수와 함께 쿼리 결과의 수를 효율적으로 얻는 방법은 무엇입니까? 모범 사례 공유

mysql_fetch_assoc 및 mysql_num_rows 함수와 함께 쿼리 결과의 수를 효율적으로 얻는 방법은 무엇입니까? 모범 사례 공유

gitbox 2025-09-28

데이터베이스 작업에 PHP를 사용하는 경우 MySQL_Fetch_Assoc ()MySQL_Num_Rows () 는 일반적으로 사용되는 두 가지 기능이며,이 기능은 각각 쿼리 결과 세트의 단일 행 데이터와 결과 세트의 행 수를 얻는 데 사용됩니다. 일반적 으로이 두 기능을 결합하여 쿼리 결과, 특히 쿼리 데이터뿐만 아니라 결과 행 수를 얻는 시나리오에서 효율적으로 처리해야합니다.

1. mysql_fetch_assoc ()mysql_num_rows () 의 기본 사용

이 두 기능을 결합하는 방법에 대해 논의하기 전에 해당 기능에 대한 간략한 검토를합니다.

  • mysql_fetch_assoc ($ result) : 결과 세트에서 데이터 행을 가져 와서 배열의 키가 필드 이름이고 값이 필드의 값인데도 배열을 반환합니다. 호출 될 때마다 결과 세트의 다음 데이터 행은 데이터를 읽을 때까지 반환됩니다.

     <span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>
  • mysql_num_rows ($ result) : 결과 세트의 행 수, 즉 쿼리 결과에 포함 된 행 수를 반환합니다. 일반적으로 쿼리가 성공했는지 여부를 결정하고 데이터를 얻기 전 또는 후에 데이터 행의 총 수를 결정하는 데 사용됩니다.

     <span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_num_rows</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>

2. 일반적인 잘못된 사용

많은 개발자 들이이 두 기능을 사용할 때 종종 문제에 직면합니다. mysql_num_rows ()가 mysql_fetch_assoc () 을 호출하기 전에 호출되면 mysql_num_rows ()가 전체 결과 세트에서 행의 수를 얻을 수 있지만 mysql_fetch_assoc () 를 호출 한 후에는 Rows가 다시 움직일 수 없습니다.

3. 행 카운트와 데이터를 효율적으로 얻는 방법은 무엇입니까?

위의 문제를 해결하기 위해 먼저 mysql_num_rows () 호출하여 결과 세트의 행 수를 얻은 다음 mysql_fetch_assoc ()를 사용하여 데이터 행을 행으로 읽을 수 있습니다. 키는 쿼리 결과의 커서 (포인터) 위치를 관리하는 방법입니다. 다음은 몇 가지 일반적이고 효율적인 관행입니다.

1. 먼저 행 수를 계산 한 다음 결과 세트를 통과합니다.

가장 일반적인 방법은 mysql_fetch_assoc ()을 사용하여 쿼리 결과의 행 수를 얻은 후에 행별로 데이터 행을 읽는 것입니다. 이 방법의 장점은 총 데이터 양을 먼저 결정할 수 있으며, 이는 후속 처리를 용이하게한다는 것입니다.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_num_rows</span></span><span>(</span><span><span class="hljs-variable">$result</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">"쿼리 결과가 있습니다 <span class="hljs-subst">{$num_rows}</span></span></span><span> 라인 데이터。";

</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</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">"사용자 이름: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
}
</span></span>

현재 MySQL_NUM_ROWS ()는 먼저 총 행 수를 계산 한 다음 MySQL_Fetch_Assoc ()는 데이터 행을 행으로 읽습니다. 이 경우, mysql_fetch_assoc () 을 호출 한 후 결과 세트에 대한 포인터가 이동 했으므로 mysql_num_rows () 가 제공하는 행 수는 총 레코드 수를 표시하는 데 사용되며 더 이상 실제 데이터 읽기 순서와 관련이 없습니다.

2. mysql_fetch_assoc ()를 사용하여 데이터를 가져 와서 계산하십시오.

결과를 가로 질러 행 수를 계산 해야하는 경우 mysql_num_rows ()에 의존하지 않고 mysql_fetch_assoc () 에서 직접 계산할 수 있습니다. 이 접근법은 데이터베이스에서 반환 된 총 행 수에 신경 쓰지 않고 데이터 처리에만 관심이있는 귀하에게 적용됩니다.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$row_count</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;  </span><span><span class="hljs-comment">// 계산에 사용됩니다</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-comment">// 각 행을 읽습니다,하나를 세십시오</span></span><span>
    </span><span><span class="hljs-variable">$row_count</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">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"쿼리 결과가 있습니다 <span class="hljs-subst">{$row_count}</span></span></span><span> 라인 데이터。";
</span></span>

이 방법에서는 mysql_fetch_assoc () 을 통해 각 데이터 행을 얻고 사용자 정의 $ row_count 변수를 통해 수동으로 계산하므로 MySQL_Num_rows ()에 대한 여러 호출로 인한 성능 부담을 피합니다.

3. 큰 데이터 세트를 효율적으로 처리합니다 (총 행 수를 미리 계산하지 않음)

매우 큰 데이터 세트로 작업 할 때 총 행 수를 계산하는 것은 성능 부담 일 수 있습니다. 효율성을 향상시키기 위해서는 데이터를 읽기 전에 행의 수를 계산하지 않고 데이터를 직접 처리하는 것이 가장 좋습니다. mysql_fetch_assoc ()를 사용하여 데이터 루프를 처리하고 동적으로 행 수를 계산할 수 있습니다.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$row_count</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-variable">$row_count</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">"총이 있습니다 <span class="hljs-subst">{$row_count}</span></span></span><span> 라인 데이터。";
</span></span>

이 접근법의 장점은 추가 계산을 수행하지 않고 데이터를 직접 처리 할 때 특히 큰 데이터 볼륨을 쿼리 할 때 성능을 크게 향상시킬 수 있다는 것입니다.

4. 요약

  1. mysql_num_rows () 에 대한 여러 통화를 피하십시오 : mysql_num_rows () 로 호출하면 전체 결과 세트를 스캔하여 성능에 영향을 미칩니다. 총 행 수를 필요로하지 않고 mysql_fetch_assoc () 을 통해 데이터를 직접 이동하는 것이 가장 좋습니다.

  2. 실제 요구에 따라 계획을 선택하십시오 . 실제로 행 수를 쿼리 해야하는 경우 먼저 mysql_num_rows () 에게 전화 할 수 있습니다. 각 데이터 행을 처리하기 만하면 MySQL_Fetch_Assoc ()을 통해 구현하여 수동으로 계산할 수 있습니다.

  3. 대형 데이터 세트에서 mysql_num_rows ()를 사용하지 마십시오 . 사전에 행의 수를 사전 정리하면 쿼리 결과가 매우 커지면 불필요한 성능 오버 헤드가 발생할 수 있습니다. 데이터의 직접적인 이동 및 실시간으로 처리하는 것은보다 효율적인 접근법입니다.

이 두 기능을 합리적으로 사용하면 쿼리 결과의 데이터를보다 효율적으로 얻고 처리하여 시스템의 성능 및 응답 속도를 향상시킬 수 있습니다.