DBD::mysql::st 执行失败:未知列
DBD::mysql::st execute failed: Unknown column
当我从 mysql 控制台执行下面的查询时,它工作正常但是当我换行到 perl/DBI 时,我得到:
DBD::mysql::st execute failed: Unknown column 'AR_email' in 'field list'
这里是查询:
my $q = "SELECT SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) =?";
my $sth=$dbh->prepare($q);
$sth->execute($domain);
知道如何解决这个问题吗?
这里的问题是无意的字符串插值。
您在将查询字符串分配给 $q
时使用了双引号 ("
),但它包含一个 arobas (@
),它是插值的。
所以 $q
实际上最终包含:
SELECT SUBSTRING(AR_email, LOCATE(', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE(', AR_email) + 1) =?
如果您 运行 在 use warnings
下,您会收到此消息:
Possible unintended interpolation of @' in string
解决这个问题的一种方法是将查询定义为乱码字符串,例如:
my $q = q/SELECT SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) =?/;
故事的寓意:
只有在 需要字符串插值时才使用双引号
总是use strict; use warnings;
当我从 mysql 控制台执行下面的查询时,它工作正常但是当我换行到 perl/DBI 时,我得到:
DBD::mysql::st execute failed: Unknown column 'AR_email' in 'field list'
这里是查询:
my $q = "SELECT SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) =?";
my $sth=$dbh->prepare($q);
$sth->execute($domain);
知道如何解决这个问题吗?
这里的问题是无意的字符串插值。
您在将查询字符串分配给 $q
时使用了双引号 ("
),但它包含一个 arobas (@
),它是插值的。
所以 $q
实际上最终包含:
SELECT SUBSTRING(AR_email, LOCATE(', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE(', AR_email) + 1) =?
如果您 运行 在 use warnings
下,您会收到此消息:
Possible unintended interpolation of @' in string
解决这个问题的一种方法是将查询定义为乱码字符串,例如:
my $q = q/SELECT SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) =?/;
故事的寓意:
只有在 需要字符串插值时才使用双引号
总是
use strict; use warnings;