SQL LIKE与Perl中的文本的%查询

时间:2017-04-13 12:09:25

标签: sql perl dbi

我有以下代码:

$query = "SELECT tac FROM lte_modems WHERE tac = ?";
$check_name = $dbh->prepare($query);
$my_name = "Jo"         
$check_name->execute($my_name);
my @result = $check_name->fetchrow_array();

完美无缺。 我想更改SQL查询以获取以" Jo"开头的名称: 即我的SQL查询应该是

   $query = "SELECT tac FROM lte_modems WHERE tac LIKE '?%'";

但这没有成功。任何帮助请?也许我需要逃避一些角色?

提前致谢

2 个答案:

答案 0 :(得分:7)

您需要在参数中加入%。否则,当DBI为您处理时,您将获得额外的引用。

my $sth = $dbh->prepare( "SELECT tac FROM lte_modems WHERE tac LIKE ?" );
$sth->execute( $my_name . '%' );

诀窍在于总是让DBI做所有引用并且不做任何事情。如果占位符?位于等于=LIKEREGEXP或其他内容之后,DBI并不在意。它正确地转义引号并在必要时添加引号。你根本不想干涉它。

答案 1 :(得分:1)

您引用?,将其从占位符转换为字符串。使用

my $sth = $dbh->prepare("SELECT tac FROM lte_modems WHERE tac LIKE ?");
$sth->execute($my_name . '%');

my $sth = $dbh->prepare("SELECT tac FROM lte_modems WHERE tac LIKE CONCAT(?, '%')");