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

尝试使用现有的 SQL 解析器库。

例如:

于 2013-03-25T03:57:13.653 回答
0

以你的方式去做是不安全的,因为在 SQL 语句中也可能有 \r 或 \n (例如,有很多行的长 TEXT)。

如果您确定没有这样的情况,我建议您使用trim()而不是str_replace()。它将删除每行末尾的所有空格和 EOL。

<?php

$tmp = trim($line);

?>

您也可以像这样指定仅删除 EOL(“\r\n”和“\n”):

<?php

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

?>
于 2013-03-09T11:03:13.737 回答