用php获取mysql表结构

时间:2011-12-29 12:34:57

标签: php mysql

我有一个脚本,它接受数据库并为数据库生成类似查询的导出作为备份。我出于某种目的需要这个脚本。我的PHP代码是:

mysql_query("SHOW CREATE TABLE `myTable`");

数据库中有17个表。我正在为所有17个表运行for循环。我用外键获取创建表查询,我不想要。它返回如 -

CREATE TABLE `customers` (
  `person_id` int(10) NOT NULL,
  `account_number` varchar(255) DEFAULT NULL,
  `taxable` int(1) NOT NULL DEFAULT '1',
  `deleted` int(1) NOT NULL DEFAULT '0',
  UNIQUE KEY `account_number` (`account_number`),
  KEY `person_id` (`person_id`),
  CONSTRAINT `customers_ibfk_1` FOREIGN KEY (`person_id`) REFERENCES `people` (`person_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

由于外键,在运行创建表的查询时会出错。有没有办法让sql没有外键?像 -

CREATE TABLE IF NOT EXISTS `customers` (
  `person_id` int(10) NOT NULL,
  `account_number` varchar(255) DEFAULT NULL,
  `taxable` int(1) NOT NULL DEFAULT '1',
  `deleted` int(1) NOT NULL DEFAULT '0',
  UNIQUE KEY `account_number` (`account_number`),
  KEY `person_id` (`person_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2 个答案:

答案 0 :(得分:3)

在创建表格时禁用外键。

SET FOREIGN_KEY_CHECKS=0

CREATE TABLE a
CREATE TABLE b
...

再次启用密钥

SET FOREIGN_KEY_CHECKS=1

答案 1 :(得分:0)

您可以按照别处的建议禁用外键检查。如果您确实要从CREATE TABLE语句中删除约束,则可以使用以下代码,它假定$createSql将包含CREATE TABLE SQL语句:

$createSql = preg_replace('/CONSTRAINT[^\n]+/im', '', $createSql);
$createSql = preg_replace('/,\s+\)/im', "\n)", $createSql);