我需要将以下mySQL查询编写成我需要为多个模式执行的PHP格式。此查询生成数据字典。
select t.table_schema as schema_name,
t.table_name,
(case when t.table_type = 'BASE TABLE' then 'table'
when t.table_type = 'VIEW' then 'view'
else t.table_type end) as table_type,
c.column_name,
c.column_type,
c.column_default,
(case when c.column_key = ' ' then '-'
when c.column_key = 'MUL' then 'FK'
else 'PK' end) as column_key,
c.is_nullable,
c.column_comment
from information_schema.tables as t
inner join information_schema.columns as c on t.table_name = c.table_name and t.table_schema = c.table_schema
where t.table_type in('base table', 'view') and t.table_schema = 'testdb'
order by t.table_schema, t.table_name, c.ordinal_position
我尝试在PHP中使用以下语法:
$sql = "select t.table_schema as schema_name,
t.table_name,
(case when t.table_type = 'BASE TABLE' then 'table'
when t.table_type = 'VIEW' then 'view'
else t.table_type end) as table_type,
c.column_name,
c.column_type,
c.column_default,
(case when c.column_key = ' ' then '-'
when c.column_key = 'MUL' then 'FK'
else 'PK' end) as column_key,
c.is_nullable,
c.column_comment
from information_schema.tables as t
inner join information_schema.columns as c on t.table_name = c.table_name and t.table_schema = c.table_schema
where t.table_type in('base table', 'view') and t.table_schema = 'testdb'
order by t.table_schema, t.table_name, c.ordinal_position";
但是当我执行此操作时,我收到以下错误:
Notice: Undefined index: t.table_schema in C:\laragon\www\createDict.php on line 32
schema_name:
我用它来创建输出(现在只用于第一列):
while($row = $result->fetch_assoc())
{
echo "schema_name: " . $row["t.table_schema"]."<br>";
}
如果有人可以帮助我,我真的很感激。谢谢你的时间!
答案 0 :(得分:1)
在您的查询中,您有:
select t.table_schema as schema_name
因此,一旦您在PHP中得到结果,带有数据的数组将调用此&#34; schema_name&#34;。你应该使用:
echo "schema_name: " . $row["schema_name"]."<br>";
附注:PHP中的结果数组不包含数据中的表名,因此在您选择c.column_type
的情况下,您需要使用$row['column_type']
获取值 - c.
部分。