1

この PHP コードの何が問題なのかわかりません。

$sql = "CREATE TABLE テスト (
 id mediumint(9) unsigned NOT NULL auto_increment,
 ファイル名テキスト NOT NULL,
 メタロングテキスト、
 added_date datetime NOT NULL デフォルト '0000-00-00 00:00:00',
 主キー (ID)
)";
var_export(explode("\n",$sql));

上記のコードは、基本的に $sql の文字列を改行文字 ('\n') で分解し、 を使用して出力しvar_exportます。コードを操作するためのPHPテストファイルがいくつかありますが、すべてが希望どおりに表示されるわけではありません。

配列 ( 0 => 'CREATE TABLE テスト ( ',
        1 => ' id mediumint(9) unsigned NOT NULL auto_increment, ',
        2 => ' ファイル名テキスト NOT NULL, ',
        3 => ' メタロングテキスト, ',
        4 => ' added_date datetime NOT NULL デフォルト \'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) ) ;', )

違いに気づきますか?文字列を分解する改行がないため、2番目に表示されます。ここで何が起こっているのかわかりません。誰か何か知ってるかも?

4

2 に答える 2

3

line feed見た目に柔軟に対応する必要があります。柔軟な分解を行うことができます:

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

... または、ライン フィードを選択した形式に正規化することもできます。

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

SHOWまた、MySQL には、テーブル定義から最も有用なデータを取得できるいくつかのステートメントが用意されていることにも注意してください。多くの場合、出力の解析はSHOW CREATE TABLE必要ありません。

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

于 2011-01-04T15:12:46.380 に答える
1

すべてのページは同じコンピューターで作成されましたか? 行末文字コードは、オペレーティング システムによって異なります。システムが Windows、Mac、または *nix のいずれであるかに応じて\n、 、\r、およびのいずれかになります。\r\n3つすべてを確認することをお勧めします。

于 2011-01-04T15:04:51.653 に答える