我不知道这个PHP代码有什么问题:
$sql = "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) )"; var_export(explode("\n",$sql));
上面的代码基本上使用换行符char('\ n')爆炸$ sql中的字符串,然后使用var_export
输出它。我有一些PHP测试文件来处理代码,但并不是所有这些都显示了我希望的内容:
array ( 0 => 'CREATE TABLE test ( ', 1 => ' id mediumint(9) unsigned NOT NULL auto_increment, ', 2 => ' filenames text NOT NULL, ', 3 => ' meta longtext, ', 4 => ' added_date datetime NOT NULL default \'0000-00-00 00:00:00\', ', 5 => ' PRIMARY KEY (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) ) ;', )
注意区别?第二个显示它,因为没有新行来爆炸字符串。我不知道这里发生了什么。任何人都知道一些事情吗?
答案 0 :(得分:3)
您需要灵活处理line feed
的样子。你可以进行灵活的爆炸:
preg_split("/[\r\n]+/", $sql)
...或者您可以将换行符规范化为您选择的格式:
$sql = strtr($sql, array(
"\r\n" => "\n",
"\r" => "\n",
));
explode("\n",$sql)
值得注意的是,MySQL提供了几个SHOW
语句,允许您从表定义中获取最有用的数据。通常不需要解析SHOW CREATE TABLE
输出:
答案 1 :(得分:1)
是否在同一台计算机上创建了所有页面?对于不同的操作系统,行结束字符代码是不同的。它可以是以下之一:\n
,\r
和\r\n
,具体取决于系统是Windows,Mac还是* nix。您可能想要检查这三个。