我有以下代码:
$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 '?%'";
但这没有成功。任何帮助请?也许我需要逃避一些角色?
提前致谢
答案 0 :(得分:7)
您需要在参数中加入%
。否则,当DBI为您处理时,您将获得额外的引用。
my $sth = $dbh->prepare( "SELECT tac FROM lte_modems WHERE tac LIKE ?" );
$sth->execute( $my_name . '%' );
诀窍在于总是让DBI做所有引用并且不做任何事情。如果占位符?
位于等于=
,LIKE
或REGEXP
或其他内容之后,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(?, '%')");