2011-12-29 12 views
0

私はデータベースを取り、バックアップとしてデータベースのクエリのようなエクスポートを生成するスクリプトを持っています。私は目的のためにこのスクリプトが必要です。私のPHPコードは:PHPでmysqlテーブル構造を取得

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

データベースには17のテーブルがあります。私はすべての17のテーブルのforループを実行しています。私は望んでいない外部キーを使用してテーブル作成クエリを取得します。外字キーのためにlike-

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を取得する方法はありますか? like-

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; 
+0

はすでにそこにあるDBのバックアップツールのいずれかを調査している:あなたは本当に、次のコードを使用することができるCREATE TABLE文から制約を削除したい場合は、それが$createSqlCREATE TABLE SQL文が含まれていることを前提としてい車輪を再発明しようとするよりも? mysqldumpやmysqlhotcopyなどのプログラムとともに、MySQLのネイティブレプリケーションをバックアップに使用できます。 – liquorvicar

答えて

3

テーブルの作成中に外部キーを無効にします。他の場所で示唆したよう

SET FOREIGN_KEY_CHECKS=0 

CREATE TABLE a 
CREATE TABLE b 
... 

有効キーが再び

SET FOREIGN_KEY_CHECKS=1 
0

あなたは外部キーチェックを無効にすることができます。

$createSql = preg_replace('/CONSTRAINT[^\n]+/im', '', $createSql); 
$createSql = preg_replace('/,\s+\)/im', "\n)", $createSql); 
関連する問題