SQL LIKE with % 在 Perl 中查询文本
SQL LIKE with % query for text in Perl
我有如下一段代码:
$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 '?%'";
但这行不通。有什么帮助吗?也许我需要转义一些字符?
提前致谢
您需要在参数中包含 %
。否则,您将获得额外的报价,因为 DBI 会为您处理。
my $sth = $dbh->prepare( "SELECT tac FROM lte_modems WHERE tac LIKE ?" );
$sth->execute( $my_name . '%' );
真正的诀窍是始终让 DBI 完成所有引用并自己完成 none。 DBI 不关心占位符 ?
是否在等于 =
、LIKE
或 REGEXP
或其他东西之后。它正确地转义引号并在必要时添加引号。你根本不想干涉它。
您引用了 ?
,将其从占位符转换为字符串。使用
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(?, '%')");
我有如下一段代码:
$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 '?%'";
但这行不通。有什么帮助吗?也许我需要转义一些字符?
提前致谢
您需要在参数中包含 %
。否则,您将获得额外的报价,因为 DBI 会为您处理。
my $sth = $dbh->prepare( "SELECT tac FROM lte_modems WHERE tac LIKE ?" );
$sth->execute( $my_name . '%' );
真正的诀窍是始终让 DBI 完成所有引用并自己完成 none。 DBI 不关心占位符 ?
是否在等于 =
、LIKE
或 REGEXP
或其他东西之后。它正确地转义引号并在必要时添加引号。你根本不想干涉它。
您引用了 ?
,将其从占位符转换为字符串。使用
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(?, '%')");