현재 위치: > 최신 기사 목록> pdostatement :: ColumnCount 함수를 사용하여 쿼리 결과의 열 수를 정확하게 얻는 방법은 무엇입니까?

pdostatement :: ColumnCount 함수를 사용하여 쿼리 결과의 열 수를 정확하게 얻는 방법은 무엇입니까?

gitbox 2025-06-09

1. pdostatement :: columnCount () 란 무엇입니까?

pdostatement :: columnCount ()pdostatement 객체의 결과 세트의 열 수와 관련된 정수 값을 반환하는 메소드입니다. 프로토 타입은 다음과 같습니다.

 public PDOStatement::columnCount(): int

SQL 쿼리 (특히 Select 문)를 실행 한 후이 메소드를 호출하여 결과 세트에 포함 된 열 수를 얻을 수 있습니다.


2. 기본 사용법

가장 간단한 예를 살펴 보겠습니다.

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users');

$columnCount = $stmt->columnCount();

echo "열의 수는입니다: " . $columnCount;
?>

위의 코드가 실행되면 출력은 다음과 같습니다.

 열의 수는입니다: 3

쿼리 결과에는 ID , 이름이메일의 세 가지 필드가 포함되어 있음을 보여줍니다.


3. 참고 : 열 수를 얻으려면 쿼리를 실행해야합니다.

일반적인 오해는 쿼리가 실행되지 않거나 비일질 세트 쿼리 (예 : 삽입 , 업데이트 , 삭제 )를 수행 한 후 ColumnCount ()를 호출하는 것입니다. 이것은 잘못되었습니다.

 <?php
$stmt = $pdo->prepare('SELECT id, name FROM users WHERE id = :id');
// 실행되지 않았습니다 -> columnCount 돌아올 수 있습니다 0 또는 잘못된 값
echo $stmt->columnCount(); // 대개 0
?>

반환 값이 정확한지 확인하려면 쿼리가 실행 된 후에는 항상 호출해야하며 결과 세트가 얻어집니다.

 $stmt->execute([':id' => 1]);
echo $stmt->columnCount(); // 열 수를 올바르게 반환하십시오

4. ColumnCount () 의 일반적인 응용 프로그램 시나리오

1. 동적으로 테이블 제목을 구축합니다

공통 데이터베이스 테이블 브라우저 도구를 작성하고 있다고 가정하고 쿼리 결과를 기반으로 HTML 테이블의 제목 행을 동적으로 생성해야합니다. columnCount ()getColumnMeta ()를 사용하여 완료 할 수 있습니다.

 <?php
$stmt = $pdo->query('SELECT * FROM users');
$colCount = $stmt->columnCount();

echo "<table border='1'><tr>";
for ($i = 0; $i < $colCount; $i++) {
    $meta = $stmt->getColumnMeta($i);
    echo "<th>" . htmlspecialchars($meta['name']) . "</th>";
}
echo "</tr>";
?>

쿼리 결과에 해당하는 헤더가 자동으로 생성됩니다.


5. rowCount ()columnCount () 비교

많은 초보자는 RowCount ()ColumnCount ()를 혼동합니다. 둘 사이의 차이점은 다음과 같습니다.

  • ColumnCount () : 쿼리 결과에서 열 수를 가져옵니다.

  • RowCount () : 영향을받는 행의 수를 얻지 만 선택 쿼리에서 항상 신뢰할 수있는 것은 아닙니다.

선택 쿼리로 반환 된 행 수를 얻으려면 fetchall () 또는 Traversal 결과 세트 계수를 사용해야합니다.


6. 다른 데이터베이스의 호환성과 관련하여

ColumnCount () 의 동작은 기본적으로 데이터베이스에서 일관되지만 일부 드라이버 (예 : 이전 버전의 SQLITE 또는 일부 ODBC 드라이버)는 실행 전에 0을 반환 할 수 있습니다. 따라서 정확한 값을 얻으려면 다음 규칙을 따라야합니다.

  1. () 또는 query ()가 실행되어야합니다.

  2. 메타 데이터 가능 드라이버를 사용하십시오.

  3. 결과가없는 진술 에서이 방법을 호출하지 마십시오.


7. 프로세스 REST API 출력 필드 정보

REST API를 개발하고 각 레코드의 필드 정보를 반환하려면 columnCount ()를 사용하여 필드 목록을 자동으로 생성 할 수 있습니다.

 <?php
$stmt = $pdo->query('SELECT * FROM users');
$columns = [];
for ($i = 0; $i < $stmt->columnCount(); $i++) {
    $meta = $stmt->getColumnMeta($i);
    $columns[] = $meta['name'];
}

header('Content-Type: application/json');
echo json_encode([
    'columns' => $columns,
    'data' => $stmt->fetchAll(PDO::FETCH_ASSOC)
]);
?>

이것은 https://gitbox.net/api/v1/table/users 와 같은 인터페이스를 구축 할 때 특히 편리합니다.