php pdo:有一个DBMS不可知论者是可能的';描述表';?
我有一个脚本,可以解析数据库并创建php类来处理该数据库。(zend db模型生成器)。有没有一种方法可以在php中使用DBMS命令,以便在每种类型的数据库上返回表结构 因此,不管我对mysql和postgresql使用一次pdo驱动程序,它仍然会返回表结构php pdo:有一个DBMS不可知论者是可能的';描述表';?,php,pdo,database,Php,Pdo,Database,我有一个脚本,可以解析数据库并创建php类来处理该数据库。(zend db模型生成器)。有没有一种方法可以在php中使用DBMS命令,以便在每种类型的数据库上返回表结构 因此,不管我对mysql和postgresql使用一次pdo驱动程序,它仍然会返回表结构 目前我看到的唯一解决方案是获取db类型并打开每个db类型并执行相应的命令。不幸的是,就我所知,使用相同的SQL查询似乎不太可能 关于通过数据库提取每个表的信息以生成一些PHP类的想法,这是(最著名的PHP ORM)所做的事情之一 如果您下
目前我看到的唯一解决方案是获取db类型并打开每个db类型并执行相应的命令。不幸的是,就我所知,使用相同的SQL查询似乎不太可能
关于通过数据库提取每个表的信息以生成一些PHP类的想法,这是(最著名的PHP ORM)所做的事情之一 如果您下载它,并查看
doctor/Import/[DatabaseType].php中的类,您会发现这对于每种数据库都是不同的
例如,对于MySQL,以下代码段用于doctor\u Import\u MySQL
:
'listTableFields' => 'DESCRIBE %s',
'listTableColumns' => "SELECT
a.attnum,
a.attname AS field,
t.typname AS type,
format_type(a.atttypid, a.atttypmod) AS complete_type,
a.attnotnull AS isnotnull,
(SELECT 't'
FROM pg_index
WHERE c.oid = pg_index.indrelid
AND a.attnum = ANY (pg_index.indkey)
AND pg_index.indisprimary = 't'
) AS pri,
(SELECT pg_attrdef.adsrc
FROM pg_attrdef
WHERE c.oid = pg_attrdef.adrelid
AND pg_attrdef.adnum=a.attnum
) AS default
FROM pg_attribute a, pg_class c, pg_type t
WHERE c.relname = %s
AND a.attnum > 0
AND a.attrelid = c.oid
AND a.atttypid = t.oid
ORDER BY a.attnum",
另一方面,对于PostgreSQL,在原则\u Import\u Pgsql
中有以下内容:
'listTableFields' => 'DESCRIBE %s',
'listTableColumns' => "SELECT
a.attnum,
a.attname AS field,
t.typname AS type,
format_type(a.atttypid, a.atttypmod) AS complete_type,
a.attnotnull AS isnotnull,
(SELECT 't'
FROM pg_index
WHERE c.oid = pg_index.indrelid
AND a.attnum = ANY (pg_index.indkey)
AND pg_index.indisprimary = 't'
) AS pri,
(SELECT pg_attrdef.adsrc
FROM pg_attrdef
WHERE c.oid = pg_attrdef.adrelid
AND pg_attrdef.adnum=a.attnum
) AS default
FROM pg_attribute a, pg_class c, pg_type t
WHERE c.relname = %s
AND a.attnum > 0
AND a.attrelid = c.oid
AND a.atttypid = t.oid
ORDER BY a.attnum",
似乎没那么容易^^
而且,在每个类的后面,都有一个名为listTableColumns
的方法——对于每种数据库类型来说,它是不同的
所以我猜事情不会像你希望的那么简单
但是,作为旁注:也许你可以在项目的这一部分使用条令——可能比重新发明轮子更快;-) 嗨。谢谢你的更新。我有我自己的项目叫做zend db model generator,它在谷歌代码上。想改进一下吗?好的,关于你自己的项目:-);;玩得高兴