我正在阅读我们公司的代码库,我看到了一些似乎可以做得更好的东西。
$dbRow = $dbh->Execute("SELECT * FROM database.table LIMIT 1");
$tableColumnCount = $dbRow->_numOfFields;
这是使用 ADODB 获取列数的唯一方法吗?必须执行查询以便您可以提出问题似乎很愚蠢。
您可以使用INFORMATION_SCHEMA.COLUMNS表:
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'your_table_name'
AND table_schema = 'your_database_name'
也就是说,您可能希望FLUSH TABLES
在 INFORMATION_SCHEMA.COLUMNS 之前运行命令以反映现有的表和列,因为数据已缓存。
MetaColumns 或 MetaColumnNames应该给你这个信息
无论哪种方式,您最终都必须访问数据库,除非您的程序可以神奇地知道表的模式。如果 LIMIT 0 在 MySQL 中是合法的,那么这会稍微高效一些——正如我所期望的那样,将 LIMIT 1 替换为 WHERE 1 = 0。