mysql_fetch_assoc () : (키 이름은 필드 이름이고 값은 해당 행의 해당 필드의 값입니다). 종종 쿼리 결과에서 각 데이터 행을 가로 지르는 데 사용됩니다.
mysql_fetch_field () : 결과 세트에서 필드 (열) 메타 정보 (예 : 필드 이름, 유형, 길이 등)를 얻고 행 데이터가 아닌 열 구조 정보를 얻는 데 사용됩니다.
mysql_fetch_assoc ()는 사용자 목록 표시 및 각 레코드 처리와 같은 쿼리에서 반환 된 데이터 행을 읽는 데 사용됩니다.
mysql_fetch_field ()는 테이블 헤더를 동적으로 생성 할 때, 양식을 자동으로 생성 및 열 유형 또는 길이를 확인하는 것과 같은 쿼리 결과 세트의 필드 정의를 읽는 데 사용됩니다.
 <span><span><span class="hljs-comment">// 이미 있다고 가정합니다 $link = mysql_connect(...); mysql_select_db(...);</span></span><span>
</span><span><span class="hljs-comment">// 쿼리 데이터</span></span><span>
</span><span><span class="hljs-variable">$res</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, username, email FROM users"</span></span><span>);
</span><span><span class="hljs-comment">// 사용 mysql_fetch_assoc() 각 라인을 통해 반복하십시오</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">$res</span></span><span>)) {
    </span><span><span class="hljs-comment">// $row 연관 배열입니다: ['id' => '1', 'username' => 'alice', 'email' => '[email protected]']</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: <span class="hljs-subst">{$row['id']}</span></span></span><span>, 사용자 이름: </span><span><span class="hljs-subst">{$row['username']}</span></span><span>\n";
}
</span><span><span class="hljs-comment">// 현장 정보를 얻으십시오(예를 들어2열 정보)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mysql_data_seek</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// 선택 과목:포지셔닝 포인터(mysql_fetch_field 라인 포인터를 변경하지 마십시오,但与사용习惯有关)</span></span><span>
</span><span><span class="hljs-variable">$field</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_field</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// 매개 변수 1 Indicates the 2 목록(인덱스 0 시작)</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$field</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"1.2목록名: <span class="hljs-subst">{$field->name}</span></span></span><span>, 유형: </span><span><span class="hljs-subst">{$field->type}</span></span><span>, 길이: </span><span><span class="hljs-subst">{$field->max_length}</span></span><span>\n";
}
</span></span>설명 :
mysql_fetch_assoc ()는 행 데이터에 액세스하기위한 배열을 반환합니다.
mysql_fetch_field ()는 열의 메타 정보가 포함 된 개체 (또는 거짓 )를 반환합니다 (이름, orgname, max_length, type 등).
나는 mysql_fetch_field ()가 특정 행의 필드 값을 반환 할 것이라고 잘못 생각했다. 아니 , 필드의 구조/메타 정보를 반환한다. 값을 얻으려면 mysql_fetch_assoc () / mysql_fetch_row () 등을 사용하십시오.
mysql_fetch_assoc ()는 필드의 유형 또는 길이를 얻을 수 있다고 믿어집니다. 아니요 , 값 (및 필드 이름) 만 제공합니다.
쿼리 결과를 반복하고 데이터를 처리 하려고합니다. mysql_fetch_assoc () (또는 더 현대적인 mysqli_fetch_assoc () / pdo 's fetch (pdo :: fetch_assoc) ).
테이블 헤더를 동적으로 생성하거나 열 유형을 확인하거나 열 이름/길이 및 기타 메타 정보를 읽으려고 합니다. mysql_fetch_field () (또는 mysqli_fetch_field_direct () , $ result-> fetch_field () , pdo getColumnMeta () (참고 공동성 및 제한)를 사용하십시오.
보안, 성능 및 장기 유지 보수를 고려하는 것이 목표라면 가능한 빨리 MySQLI 또는 PDO 로 마이그레이션 하십시오. MySQL 연장은 PHP 7+에서 제거되었다.
 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_connect</span></span><span>(</span><span><span class="hljs-string">'host'</span></span><span>,</span><span><span class="hljs-string">'user'</span></span><span>,</span><span><span class="hljs-string">'pass'</span></span><span>,</span><span><span class="hljs-string">'db'</span></span><span>);
</span><span><span class="hljs-variable">$res</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_query</span></span><span>(</span><span><span class="hljs-variable">$mysqli</span></span><span>, </span><span><span class="hljs-string">"SELECT id, username, email FROM users"</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__">mysqli_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</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">"\n"</span></span><span>;
}
</span><span><span class="hljs-comment">// 현장 정보를 얻으십시오(1. 1 목록)</span></span><span>
</span><span><span class="hljs-variable">$fieldInfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_fetch_field_direct</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// 또는 mysqli_fetch_field($res) 필드를 가로 질러</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$fieldInfo</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$fieldInfo</span></span><span>->name . </span><span><span class="hljs-string">' / '</span></span><span> . </span><span><span class="hljs-variable">$fieldInfo</span></span><span>->type . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span> <span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=host;dbname=db;charset=utf8mb4'</span></span><span>, </span><span><span class="hljs-string">'user'</span></span><span>, </span><span><span class="hljs-string">'pass'</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, username, email FROM users"</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-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'email'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-comment">// 필드 요소 정보를 얻으십시오(알아채다:PDO::getColumnMeta 일부 운전자에서/불안정한 버전)</span></span><span>
</span><span><span class="hljs-variable">$meta</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getColumnMeta</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// 1. 2 목록</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$meta</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">', native_type='</span></span><span> . (</span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'native_type'</span></span><span>] ?? </span><span><span class="hljs-string">'unknown'</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>mysql_fetch_assoc () : Return Row Data (Association Array) - 일일 읽기 레코드에 선호되는 선택입니다.
mysql_fetch_field () : 리턴 열 요소 정보 (개체) - 열 이름, 유형 및 길이와 같은 구조 정보를 읽는 데 사용됩니다.
실제 개발에서 MySQLI 또는 PDO를 사용해야하며 Fetch_assoc () / fetch_field () / getColumnMeta () 와 같은 해당 대체 함수를 사용하여 동일한 작업을 완료해야합니다.
SQL 주입을 방지하기 위해 매개 변수화 된 쿼리 (전처리 문)를 사용하여 ( MySQLI를 위해 / bind_param을 준비하거나 , PDO를 위해 / bindValue를 준비 ) 시도하십시오.
열 이름 목록이 필요한 경우 간단한 방법은 첫 번째 행의 연관 배열을 가져 와서 Array_Keys ()를 사용하여 필드 이름을 얻는 것입니다 (결과 세트가 비어있을 때 추가 처리가 필요합니다).