moh*_*ton 6 postgresql escaping slash filepath
我正在尝试在Postgresql中编写一个解析文件路径的sql函数.我想只返回文件名.
我无法在函数中获得准确的文本字符串.
这是功能:
Function: job_page("inputText" text)
DECLARE
$5 text;
BEGIN
$5 = quote_literal("inputText");
return $5;
END
Run Code Online (Sandbox Code Playgroud)
当我运行这个:
select job_page('\\CAD_SVR\CADJOBS\7512-CEDARHURST ELEMENTARY SCHOOL\7512-20.DWG')
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
"E'\\CAD_SVRCADJOBSé2-CEDARHURST ELEMENTARY SCHOOLé2-20.DWG'"
Run Code Online (Sandbox Code Playgroud)
Postgresql解释斜杠后跟某些字符作为特殊字符.
我怎么逃避?
您应该使用转义字符串语法:
select E'\\CAD_SVR\\CADJOBS\\7512-CEDARHURST ELEMENTARY SCHOOL\\7512-20.DWG';
\CAD_SVR\CADJOBS\7512-CEDARHURST ELEMENTARY SCHOOL\7512-20.DWG
Run Code Online (Sandbox Code Playgroud)
这无论如何都适用.
或者您可以set standard_conforming_strings=on使用:
select '\CAD_SVR\CADJOBS\7512-CEDARHURST/ ELEMENTARY SCHOOL\7512-20.DWG';
\CAD_SVR\CADJOBS\7512-CEDARHURST/ ELEMENTARY SCHOOL\7512-20.DWG
Run Code Online (Sandbox Code Playgroud)
quote_literal只有exec在pl/pgsql函数中构建调用查询时才应使用该函数.要在客户端构造查询,您应该使用客户端的库引用函数,如PQescapeStringConnlibpq或pg_escape_stringPHP.但最好的选择是使用预准备语句并使用字符串作为参数,这样可以消除所有引用并且更加安全.
| 归档时间: |
|
| 查看次数: |
21518 次 |
| 最近记录: |