0

皆さん、こんにちは。これは、.sql ファイルを読み取り、各クエリを配列要素に格納するコードです。私の.sqlファイルには、CREATE TABLE、DROP、INSERTなどのさまざまなステートメントがあります

$fileLines = file('alltables.sql');

$templine = '';
foreach ($fileLines as $line)
{
    // Skip it if it's a comment
    if (substr($line, 0, 2) == '--' || $line == '')
    continue;

    // Add this line to the current segment
    $templine .= $line;

    // If it has a semicolon at the end, it's the end of the query
    if (substr(trim($line), -1, 1) == ';')
{
    // Perform the query
    $queries[] = $templine;
    // Reset temp variable to empty
    $templine = '';
}
}

// Here I further process $queries var

Windows プラットフォームでは正常に動作しますが、Linux サーバーで動作するかどうかはわかりませんので、コードを見て、(\t\r\ 0 \x0B) 異なるプラットフォームの改行と改行を処理するには:

$tmp=str_replace("\r\n", "\n", $line);
$tmp=str_replace("\r", "\n", $line);
4

2 に答える 2

0

\r または \n が SQL ステートメント (たとえば、多くの行を含む長い TEXT) に含まれている可能性があるため、自分のやり方で行うのは安全ではありません。

そのようなケースがないと確信している場合は、 str_replace( )の代わりにtrim()を使用することをお勧めします。各行の末尾にあるすべてのスペースと EOL が削除されます。

<?php

$tmp = trim($line);

?>

次のように、ONLY REMOVE EOL ("\r\n" と "\n" の両方) を指定することもできます。

<?php

$tmp = trim($line, "\r\n");

?>
于 2013-03-09T11:03:13.737 に答える
0

既存の SQL パーサー ライブラリを使用してみてください。

例えば:

于 2013-03-25T03:57:13.653 に答える