2

「MySQL Create Table」クエリを文字列として取得し、列名とそのデータ型を配列に格納するスクリプトを PHP で作成したいと考えています。

例えば:

入力文字列:

CREATE TABLE `test` (
`col1` INT( 10 ) NOT NULL ,
`col2` VARCHAR( 50 ) NOT NULL ,
`col3` DATE NOT NULL
) ENGINE = MYISAM ;

出力:

array(
    array( 'name'=>'col1', 'type'=>'INT', 'size'=>'10' ),
    array( 'name'=>'col2', 'type'=>'VARCHAR', 'size'=>'50' ),
    array( 'name'=>'col3', 'type'=>'DATE', 'size'=>'' )
);

クエリを直接実行するためのデータベース アクセスがありません。これまたは任意のアイデアのためのPHPライブラリはありますか?

ありがとう

4

6 に答える 6

5

preg_match_all の使用

preg_match_all("/`(.+)` (\w+)\(? ?(\d*) ?\)?/", $sql, $_matches, PREG_SET_ORDER);

これは次のような配列を生成します

array(
  array('`col1` INT( 10 )', 'col1', 'INT', '10'),
  array('`col2` VARCHAR( 50 )', 'col2', 'VARCHAR', '50'),
  array('`col3` DATE ', 'col3', 'DATE', '')
);
于 2011-04-08T06:35:06.273 に答える
2

I don't have database access to executes queries directly.それがないとデータベースからデータを取得するのは難しいでしょう...しかし、あなたは以下を使うことができます:

SELECT column_name as name, data_type as type, column_type as typeSize 
  FROM information_schema.columns 
  WHERE table_schema='db_name' AND table_name='table_name';
于 2011-04-08T05:51:53.173 に答える
1
$query = "SELECT column_name as name, data_type as type, column_type as typeSize 
            FROM information_schema.columns 
            WHERE table_schema='db_name' AND table_name='table_name'";
$viewArr=array();
$tempArr=array();
$resultSet=mysql_query($query) or trigger_error(mysql_error());
while($row=mysql_fetch_array($resultSet)) {
    $viewArr[] = $row;
}
于 2011-04-08T06:16:20.743 に答える
0

「desc $tablename」を実行するだけです:

$res=mysql_query("desc $tablename", $db_handle);
while ($r=mysql_fetch_assoc) {
    print_r($r);
}
于 2011-04-08T15:44:33.020 に答える
0
$query = "CREATE TABLE `MyTable` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(64) NOT NULL DEFAULT '', `parent` INT(10) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=MYISAM AUTO_INCREMENT=4 DEFAULT CHARSET=UTF8";

if (preg_match("/^(CREATE TABLE)+ (IF NOT EXISTS )?`([\S]+)\` \((.*)\) (.*)$/", $query, $_matches) ) {
  $table_name = $_matches[3];
  $fields = $_matches[4];
  if (preg_match_all("/`([\S^`]+)` (\w+)\(? ?(\d*) ?\)?/", $fields, $__matches, PREG_SET_ORDER)) {
    $tables[$table_name] = $__matches;
  }
}; 
print_r($tables);

結果

Array
        (
            [MyTable] => Array
                (
                    [0] => Array
                        (
                            [0] => `id` INT(10)
                            [1] => id
                            [2] => INT
                            [3] => 10
                        )

                    [1] => Array
                        (
                            [0] => `name` VARCHAR(64)
                            [1] => name
                            [2] => VARCHAR
                            [3] => 64
                        )

                    [2] => Array
                        (
                            [0] => `parent` INT(10)
                            [1] => parent
                            [2] => INT
                            [3] => 10
                        )

                )
        )
于 2017-03-27T04:01:26.790 に答える
0

探しているのは SQL パーサーです。これは役立つはずです: http://www.phpkode.com/scripts/item/sql-parse-convert-to-tree-array/

于 2011-04-08T06:29:10.220 に答える