문제

사용하고 있습니다 php/mysql 잠시 동안, 나는 사용에 구체적인 장점 (성능 또는 다른 방법)이 있는지 궁금합니다 mysql_fetch_object() vs mysql_fetch_assoc() / mysql_fetch_array().

도움이 되었습니까?

해결책

성능 측면에서 사용하는 것은 중요하지 않습니다. 차이점은 mysql_fetch_object가 개체를 반환한다는 것입니다.

while ($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
}

mysql_fetch_assoc ()는 연관 배열을 반환합니다.

while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
}

그리고 mysql_fetch_array () 배열을 반환합니다.

while ($row = mysql_fetch_array($result)) {
    echo $row[0];
    echo $row[1] ;
}

다른 팁

mysql_fetch_array 코드를 읽기 어렵게 만듭니다 = 메인 테니스 악몽. 당신은 당신의 객체가 어떤 데이터를 다루고 있는지 알 수 없습니다. 약간 더 빠르지 만 그것이 중요하다면 많은 데이터를 처리하여 PHP가 올바른 방법이 아닐 것입니다.

mysql_fetch_object 특히 DB 레이어를 기반으로하는 경우 몇 가지 단점이 있습니다.

  • 열 이름은 유효한 PHP 식별자가 아닐 수 있습니다. tax-allowance 또는 user.id 데이터베이스 드라이버가 쿼리에 지정된 열 이름을 제공하는 경우. 그런 다음 사용을 시작해야합니다 {} 여기 저기.

  • 이름을 기준으로 열을 가져 오려면 일부 변수로 스트로를 사용하려면 변수 속성을 사용해야합니다. $row->{$column_name}, 배열 구문 $row[$column_name]

  • 클래스 이름을 지정할 때 예상 할 때 생성자는 호출되지 않습니다.

  • 클래스 이름을 지정하지 않으면 stdClass, 어쨌든 배열보다 거의 나쁘지 않습니다.

mysql_fetch_assoc 작업하기에 가장 쉬운 세 가지 중에서 가장 쉬운 일이며, 이것이 객체와 데이터베이스 결과 행 사이에 코드에서 제공하는 차이점이 마음에 듭니다 ...

$object->property=$row['column1'];
$object->property=$row[$column_name];
foreach($row as $column_name=>$column_value){...}

많은 OOP 팬 (그리고 나는 OOP 팬)이 회전하는 아이디어처럼 모든 것 객체로, 나는 연관 배열이 객체보다 데이터베이스에서 행의 더 나은 모델이라고 생각한다. 더 이상의 합병증없이 취급됩니다.

명심해야 할 사항 : 어레이는 메모리 캐시 (EACCELERATOR, XCACHE, ..)에 쉽게 추가 할 수있는 반면, 물체는 할 수 없지만 (모든 검색에서 저장할 때 직렬화되어야합니다!).

메모리 캐시 지원을 추가하려면 객체 대신 배열 사용으로 전환 할 수 있습니다. 그러나 그때까지 이전에 사용한 객체 유형 리턴 값을 사용하는 많은 코드를 이미 변경해야 할 수도 있습니다.

배열을 가져 오기 mysql_fetch_array() Foreach 루프 또는 for 루프를 통해 결과 세트를 루프 할 수 있습니다. mysql_fetch_object() for 루프에 의해 통과 할 수 없습니다.

그것이 중요한지 확실하지 않습니다. 단지 언급 할 것이라고 생각했습니다.

또한 MySQL 결과에 Memcaching을 적용하려면 배열을 선택할 수 있습니다. 객체 유형 결과가 아닌 배열 유형을 저장하는 것이 더 안전한 것 같습니다.

while ($Row = mysql_fetch_object($rs)) {
    // ...do stuff...
}

... 내가 항상 한 방법입니다. 데이터를 조금 더 잘 정리하기 때문에 배열 대신 데이터 모음에 객체를 사용하는 것이 선호되며 인덱스를 추가하려고하는 것보다 임의 속성을 객체에 추가하려고 할 가능성이 훨씬 적습니다. 배열로 (처음 몇 년 동안 PHP를 사용했을 때, 나는 당신이 객체에 임의의 속성을 할당 할 수 없다고 생각했기 때문에 그렇게하지 않기 위해 뿌리 내 렸습니다).

이러한 모든 기능의 차이는 특히 코드 가독성과 비교할 때 중요하지 않다고 생각합니다.

이런 종류의 최적화가 걱정된다면 사용하십시오. mysql_fetch_row(). 연관 배열을 사용하지 않기 때문에 가장 빠릅니다 (예 : $ row [2]). 코드를 중단하는 것이 가장 쉽습니다.

속도별로, mysql_fetch_object() 동일합니다 mysql_fetch_array(), 그리고 거의 빠릅니다 mysql_fetch_row().

또한 mysql_fetch_object() 해당 필드 이름으로 만 필드 데이터에만 액세스 할 수 있습니다.

나는 반대에 투표한다 mysql_fetch_array()

숫자로 인덱스 된 열과 열 이름을 모두 다시 얻으므로 두 배나 큰 배열이 생성됩니다. 코드를 디버깅하고 내용을 볼 필요가 없다면 괜찮습니다. 그러나 우리의 나머지 사람들에게는 이상한 형식으로 두 배의 데이터를 두 배로 늘려야하기 때문에 디버깅하기가 더 어려워집니다.

나는 때때로이 기능을 사용하는 프로젝트를 수행 한 다음 디버그 할 때 숫자 열이 내 데이터와 혼합되어 있기 때문에 무언가 잘못되었다고 생각합니다.

따라서 Wanity라는 이름 으로이 기능을 사용하지 말고 코드 유지 보수가 더 어려워집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top