我想自动为我的mysql查询添加单引号

时间:2011-02-24 08:41:59

标签: mysql perl

我在perl中有几个mysql查询,但where子句的某些值包含单词之间的空格,例如冈比亚。当我的脚本使用包含空格的where子句运行时,它会忽略第二个单词。

我想知道如何解决这个问题,即如果我输入冈比亚,应该对冈比亚进行处理。

2 个答案:

答案 0 :(得分:6)

如果您使用DBI,则可以使用占位符将任意数据发送到数据库,而无需关心转义。占位符是prepare语句中的问号,实际值是execute

use DBI;

$dbh = DBI->connect("DBI:mysql:....",$user,$pass)
    or die("Connect error: $DBI::errstr");

my $sth = $dbh->prepare(qq{ SELECT something FROM table WHERE name = ? });
$sth->execute('the gambia');

# fetch data from $sth

$dbh->disconnect();

修改:如果您正在编写查询(如评论中所建议的那样),则可以使用quote方法:

my $country = "AND country = " . $dbh->quote('the gambia');
my $sth = $dbh->prepare(qq{ SELECT something FROM table WHERE name = ? $country});

答案 1 :(得分:2)

首先,您应该在应用程序中使用DBIx::Class而不是原始SQL。

但是如果你坚持使用原始SQL,那么(假设你至少使用DBI)你应该在SQL语句中使用绑定点。这将为您处理所有引用问题。

$sth = $dbh->prepare('select something from somewhere where country = ?');

$sth->execute('The Gambia');

有关绑定的详细信息,请参阅DBI docs