我在perl中有几个mysql查询,但where子句的某些值包含单词之间的空格,例如冈比亚。当我的脚本使用包含空格的where子句运行时,它会忽略第二个单词。
我想知道如何解决这个问题,即如果我输入冈比亚,应该对冈比亚进行处理。
答案 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。