以下是我的Perl脚本
str_replace(rtrim(c_manager),'''','_'),'."\n".
throws error
str_replace(rtrim(c_manager), '''"
_'之后的错误名称在pl_recert_output.pl第262行。
请帮助解决此问题:
$sql = 'select rtrim(f_admin_disabled),'."\n".
' convert(varchar,t_password,101),'."\n".
' rtrim(c_email),'."\n".
' str_replace(rtrim(c_manager),'''','_'),'."\n".
' rtrim(c_mgr_email)'."\n".
' from tuserprofile'."\n".
' where ic_user1 = '."'$user_id'"."\n";
答案 0 :(得分:3)
您的单引号字符串中有单引号。
引号字符串中的单引号必须使用\'
进行转义。
但是,最好使用multi-line quoting syntax来获得更干净的代码:
$sql = <<EOF;
select rtrim(f_admin_disabled),
convert(varchar,t_password,101),
rtrim(c_email),
str_replace(rtrim(c_manager),'''','_'),
rtrim(c_mgr_email)
from tuserprofile
where ic_user1 = '$user_id'
EOF
;
这有预期的结果,没有乱码转义和字符串连接。
答案 1 :(得分:0)
您需要转义变量赋值中的单引号:
my $user_id = 'test';
my $sql = 'select rtrim(f_admin_disabled),'."\n".
' convert(varchar,t_password,101),'."\n".
' rtrim(c_email),'."\n".
' str_replace(rtrim(c_manager),\'\'\'\',\'_\'),'."\n".
' rtrim(c_mgr_email)'."\n".
' from tuserprofile'."\n".
' where ic_user1 = '."'$user_id'"."\n";
print $sql;
结果:
select rtrim(f_admin_disabled),
convert(varchar,t_password,101),
rtrim(c_email),
str_replace(rtrim(c_manager),'''','_'),
rtrim(c_mgr_email)
from tuserprofile
where ic_user1 = 'test'
检查这是否是您期望的结果。