我在Unix上有一个SQL文件,我从PHP开始,从开始到结束时将其删除,并使用AJAX将其返回到textarea
。该文件是:
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);
但这些都不起作用 我错过了什么?
答案 0 :(得分:1)
答案 1 :(得分: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语句开头的行,你可以使用PHP的file()
将文件读入一个行数组,然后找到你需要的那一行。 E.g:
$sql = '';
$file = file('/path/to/file', FILE_IGNORE_NEWLINES);
foreach($file as $line) {
if(strpos($line, 'select') === 0) {
$sql = $line;
break;
}
}