<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This code section is unrelated to the article content and is only used to display the content before the delimiter</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Welcome to this article, which will provide a detailed explanation of how to use the PDOStatement::getColumnMeta function."</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<p><hr></p>
<p></span><?php<br>
/*</p>
<ul>
<li>
<p>How to accurately retrieve database column names and data types using PDOStatement::getColumnMeta function?</p>
</li>
<li></li>
<li>
<p>When working with databases using PHP's PDO extension, obtaining metadata from query results is crucial, especially for dynamically generating table structures, exporting data, or data validation.</p>
</li>
<li>
<p>PDOStatement::getColumnMeta is a method provided by PDO to fetch metadata of a specified column in the result set, helping us get information such as column names and data types.</p>
</li>
<li></li>
<li>
<ol>
<li>
<p>Function Overview</p>
</li>
</ol>
</li>
<li>
<p>PDOStatement::getColumnMeta(int $column):</p>
</li>
<li>
<ul>
<li>
<p>The parameter $column is the column index (starting from 0).</p>
</li>
</ul>
</li>
<li>
<ul>
<li>
<p>The return value is an associative array containing the column's metadata, such as the column name (name), data type (native_type), length (len), whether NULL is allowed (flags), etc.</p>
</li>
</ul>
</li>
<li></li>
<li>
<ol start="2">
<li>
<p>Usage Example</p>
</li>
</ol>
</li>
<li>
<p>Below is an example using MySQL demonstrating how to retrieve column names and data types via PDOStatement::getColumnMeta.<br>
*/</p>
</li>
</ul>
<p>try {<br>
$dsn = "mysql:host=localhost;dbname=testdb;charset=utf8mb4";<br>
$username = "root";<br>
$password = "";<br>
$options = [<br>
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,<br>
];</p>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, username, email, created_at FROM users LIMIT 1"</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-variable">$sql</span></span><span>);
</span><span><span class="hljs-variable">$columnCount</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">columnCount</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Column Information:\n"</span></span><span>;
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-variable">$columnCount</span></span><span>; </span><span><span class="hljs-variable">$i</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-variable">$i</span></span><span>);
</span><span><span class="hljs-comment">// Retrieve column name</span></span>
</span><span><span class="hljs-variable">$columnName</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">'Unknown Column Name'</span></span><span>;
</span><span><span class="hljs-comment">// Retrieve native database data type</span></span>
</span><span><span class="hljs-variable">$nativeType</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 Type'</span></span><span>;
</span><span><span class="hljs-comment">// Some databases return field length information</span></span>
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'len'</span></span><span>] ?? </span><span><span class="hljs-string">'Unknown Length'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Column Index <span class="hljs-subst">{$i}</span>: Name = </span><span class="hljs-subst">{$columnName}</span><span>, Type = </span><span class="hljs-subst">{$nativeType}</span><span>, Length = </span><span class="hljs-subst">{$length}</span>\n";
}
} catch (PDOException $e) {
echo "Database error: " . $e->getMessage();
}
/*
3. Notes
Metadata fields returned by different database drivers may vary and should be handled accordingly.
getColumnMeta is only effective for executed queries, and some drivers may not fully support this function.
native_type is the native type returned by the database driver and does not fully correspond to PHP types; mapping may be needed if conversion is required.
Summary
PDOStatement::getColumnMeta allows easy retrieval of query result column names and data types, enhancing the dynamic handling capability of programs.
Combined with the columnCount method, it enables iteration over all field information for more flexible database operations.
*/
?>
Related Tags:
PDOStatement