免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3113 | 回复: 6
打印 上一主题 下一主题

Perl+Mysql 查询数据库的时候,如何使用逃逸字符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-29 14:59 |只看该作者 |倒序浏览
20可用积分
比如说,mysql的一张表中(ark_volume)有一个displayname字段,我想根据这个字段来进行查找,比如,我想查找display字段的内容为nwt-vm-ark0311.demo.arkivio.com\c$

$sqr = $dbh->prepare("SELECT DISTINCT volid from ark_volume WHERE displayname = '\\\\\\\\nwt-vm-ark0311.demo.arkivio.com\\\\C$'");
我试了一下,好像不行,因为$'被识别成了一个特殊变量

所以我把单引号房到了外面
$sqr = $dbh->prepare('SELECT DISTINCT volid from ark_volume WHERE displayname = "\\\\\\\\nwt-vm-ark0311.demo.arkivio.com\\\\C$"');
貌似可以了。

不过我现在想把nwt-vm-ark0311.demo.arkivio.com\c$存入到一个变量中,之后再mysql语句中使用这个变量,好像怎么弄都不行?

谁能帮我想个办法啊?

最佳答案

查看完整内容

用 DBI 方法 quote,系统会自动处理:http://search.cpan.org/~timb/DBI-1.609/DBI.pm#quote

论坛徽章:
0
2 [报告]
发表于 2010-03-29 14:59 |只看该作者
用 DBI 方法 quote,系统会自动处理:

http://search.cpan.org/~timb/DBI-1.609/DBI.pm#quote

  1. $sql = $dbh->quote(...)
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-03-29 15:09 |只看该作者
MYSQL中有个专门的ESCAPE函数可以帮到你
SELECT DISTINCT volid from ark_volume WHERE displayname = "nwt-vm-ark0311.demo.arkivio.comC$"  ESCAPE '$';

论坛徽章:
0
4 [报告]
发表于 2010-03-29 15:17 |只看该作者
MYSQL中有个专门的ESCAPE函数可以帮到你
SELECT DISTINCT volid from ark_volume WHERE displayname = "nw ...
climby 发表于 2010-03-29 15:09


谢谢,如果直接这样hardcode的话,只要内层用的是双引号,其实是没有问题的。

问题是,如果内层是单引号,问题就出现了。$和'就会结合到一起。我现在的问题是,如果单引号在最外面,怎么能保证变量被替换呢?

论坛徽章:
0
5 [报告]
发表于 2010-03-29 15:33 |只看该作者
目前找到一个临时的办法

$inPutShare = "\\\\\\\\nwt-vm-ark0311.demo.arkivio.com\\\\C\$";

$sqr = $dbh->prepare("SELECT DISTINCT volid from ark_volume WHERE displayname = \'"."$inPutShare"."\'");

其实就是把单引号给escape掉了,不过还是要谢谢4楼的朋友,我先看看quote该怎么用

谢谢!

论坛徽章:
0
6 [报告]
发表于 2010-03-29 15:37 |只看该作者
《Programming the Perl DBI》 中有介绍:

http://oreilly.com/catalog/perldbi/chapter/ch04.html

论坛徽章:
0
7 [报告]
发表于 2010-03-29 15:53 |只看该作者
真的很方便,谢谢longbow0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP