0

我在 Unix 上有一个使用 PHP 获取的 SQL 文件,从头到尾将其剪切,然后textarea使用 AJAX 将其返回。该文件是:

Set LINESIZE 1000
set timing on
set FEEDBACK off
SET PAGESIZE 50000
set COLSEP |
set trim on
set RECSEPCHAR ~

select * from tbvalid_value where discrete_code like '%  %' and DISCRETE_CODE != 'U - Unreturned  and billed'
;

exit;

exit;我有另一个空行之后。

我要返回的只是 select 语句:

select * from tbvalid_value where discrete_code like '% %' and DISCRETE_CODE != 'U - Unreturned and billed'

为此,首先我用这个函数切掉前 8 行:

function str_chop_lines($str, $lines = 8) {
    return implode("\n", array_slice(explode("\n", $str), $lines));
};

$sql = str_chop_lines($sqlString);

这削减了所有的Set语句和空白的第 8 行。

然后,我想摆脱字符串的最后一部分(从;exit;)。为此,我正在使用这个:

$finalSql = substr($sql, 0, strpos($sql, ';'));

但是当我将字符串返回到客户端textarea时,我在它的末尾得到了 4 个空行,如图所示(我添加了红线来说明 4 个空行):

空行

我尝试用不同的方法修剪这些线条:

$sqlReturnByAjax = substr($finalSql, 0, strrpos($finalSql, "\n"));

$sqlReturnByAjax = str_replace('/n/n', '/n', $finalSql);

$sqlReturnByAjax = rtrim($finalSql);

但这些都不起作用。
我错过了什么?

4

2 回答 2

1

为什么不只是简单trim的字符串?

echo trim($yourString);

它从行的开头和结尾删除换行符、空格等。修剪

于 2013-11-19T15:32:56.377 回答
0

如果服务器上文件的内容是

Set LINESIZE 1000
set timing on
set FEEDBACK off
SET PAGESIZE 50000
set COLSEP |
set trim on
set RECSEPCHAR ~

select * from tbvalid_value where discrete_code like '%  %' and DISCRETE_CODE != 'U - Unreturned  and billed'
;

exit;

并且您只想要以 SELECT 语句开头的行,您可以使用 PHPfile()将文件读入一组行,然后找到您需要的行。例如:

$sql = '';
$file = file('/path/to/file', FILE_IGNORE_NEWLINES);

foreach($file as $line) {
  if(strpos($line, 'select') === 0) {
    $sql = $line;
    break;
  }
}
于 2013-11-19T15:40:49.730 回答