1

我不知道这个 PHP 代码有什么问题:

$sql = "创建表测试 (
 id mediumint(9) unsigned NOT NULL auto_increment,
 文件名文本不为空,
 元长文本,
 added_date datetime NOT NULL default '0000-00-00 00:00:00',
 主键(id)
)";
var_export(explode("\n",$sql));

上面的代码基本上用换行符 ('\n') 分解 $sql 中的字符串,然后使用var_export. 我有一些 PHP 测试文件来处理代码,但并不是所有的测试文件都显示了我希望它是什么:

数组(0 =>'创建表测试(',
        1 => ' id mediumint(9) unsigned NOT NULL auto_increment, ',
        2 => ' 文件名文本 NOT NULL, ',
        3 => '元长文本,',
        4 => ' added_date datetime NOT NULL default \'0000-00-00 00:00:00\', ',
        5 => '主键 (id)', 6 => ') ;',
)

一些显示这个代替:

array ( 0 => 'CREATE TABLE test ( id mediumint(9) unsigned NOT NULL auto_increment, filenames text NOT NULL, meta longtext, added_date datetime NOT NULL default \'0000-00-00 00:00:00\', PRIMARY KEY (ID) ) ;', )

注意区别?第二个显示它,因为没有换行符来爆炸字符串。我不明白这里发生了什么。有人知道吗?

4

2 回答 2

3

您需要灵活处理 a 的line feed外观。您可以进行灵活的爆炸:

preg_split("/[\r\n]+/", $sql)

...或者您可以将换行标准化为您选择的格式:

$sql = strtr($sql, array(
    "\r\n" => "\n",
    "\r" => "\n",
));
explode("\n",$sql)

还值得注意的是,MySQL 提供了几个SHOW语句,允许您从表定义中获取最有用的数据。SHOW CREATE TABLE通常不需要解析输出:

http://dev.mysql.com/doc/refman/5.1/en/show.html

于 2011-01-04T15:12:46.380 回答
1

所有页面都是在同一台计算机上创建的吗?不同操作系统的行结束字符代码不同。它可以是以下之一:\n\r\r\n,具体取决于系统是 Windows、Mac 还是 *nix。您可能需要检查所有三个。

于 2011-01-04T15:04:51.653 回答