pdostatement :: columnCount () 는 pdostatement 객체의 결과 세트의 열 수와 관련된 정수 값을 반환하는 메소드입니다. 프로토 타입은 다음과 같습니다.
public PDOStatement::columnCount(): int
SQL 쿼리 (특히 Select 문)를 실행 한 후이 메소드를 호출하여 결과 세트에 포함 된 열 수를 얻을 수 있습니다.
가장 간단한 예를 살펴 보겠습니다.
<?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 , 이름 및 이메일의 세 가지 필드가 포함되어 있음을 보여줍니다.
일반적인 오해는 쿼리가 실행되지 않거나 비일질 세트 쿼리 (예 : 삽입 , 업데이트 , 삭제 )를 수행 한 후 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(); // 열 수를 올바르게 반환하십시오
공통 데이터베이스 테이블 브라우저 도구를 작성하고 있다고 가정하고 쿼리 결과를 기반으로 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>";
?>
쿼리 결과에 해당하는 헤더가 자동으로 생성됩니다.
많은 초보자는 RowCount () 및 ColumnCount ()를 혼동합니다. 둘 사이의 차이점은 다음과 같습니다.
ColumnCount () : 쿼리 결과에서 열 수를 가져옵니다.
RowCount () : 영향을받는 행의 수를 얻지 만 선택 쿼리에서 항상 신뢰할 수있는 것은 아닙니다.
선택 쿼리로 반환 된 행 수를 얻으려면 fetchall () 또는 Traversal 결과 세트 계수를 사용해야합니다.
ColumnCount () 의 동작은 기본적으로 데이터베이스에서 일관되지만 일부 드라이버 (예 : 이전 버전의 SQLITE 또는 일부 ODBC 드라이버)는 실행 전에 0을 반환 할 수 있습니다. 따라서 정확한 값을 얻으려면 다음 규칙을 따라야합니다.
() 또는 query ()가 실행되어야합니다.
메타 데이터 가능 드라이버를 사용하십시오.
결과가없는 진술 에서이 방법을 호출하지 마십시오.
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 와 같은 인터페이스를 구축 할 때 특히 편리합니다.