gpt4 book ai didi

mysql - 为什么 Apache 提示我的 mod_perl 程序 "disconnect invalidates 1 active statement handle"?

转载 作者:可可西里 更新时间:2023-11-01 06:32:11 24 4
gpt4 key购买 nike

disconnect invalidates 1 active statement handle (either destroy statement handles or call finish on them before disconnecting)

以下从 MySQL 抓取数据的代码成功执行,但会导致 Apache 在其错误日志中生成上述消息:

my $driver   = "mysql";
my $server = "localhost:3306";
my $database = "test";
my $url = "DBI:$driver:$database:$server";
my $user = "apache";
my $password = "";

#Connect to database
my $db_handle = DBI->connect( $url, $user, $password )
or die $DBI::errstr;

#SQL query to execute
my $sql = "SELECT * FROM tests WHERE id=?";

#Prepare SQL query
my $statement = $db_handle->prepare($sql)
or die "Couldn't prepare query '$sql': $DBI::errstr\n";

#Execute SQL Query
$statement->execute($idFromSomewhere)
or die "Couldn't execute query '$sql': $DBI::errstr\n";

#Get query results as hash
my $results = $statement->fetchall_hashref('id');

$db_handle->disconnect();
  • 会不会有什么可怕的后果通过忽略上述错误/警告?代码已经运行一周没有任何不良影响。

  • 代码有没有问题或者这只是一个无害的警告?

编辑

代码通过 mod_perl 执行。

最佳答案

您应该在 $db_handle->disconnnect(); 之前调用 $statement->finish();

通常你不需要调用finish,除非你没有得到所有的行。如果您使用 fetchrow_array 在一个循环中获得所有结果,除非您中止循环,否则您不会在最后调用 finish。

我不确定为什么 MySQL 驱动程序没有在 fetchall_hashref 之后完成语句。手册建议您的查询可能由于错误而中止:

If an error occurs, fetchall_hashref returns the data fetched thus far, which may be none. You should check $sth->err afterwards (or use the RaiseError attribute) to discover if the data is complete or was truncated due to an error.

关于mysql - 为什么 Apache 提示我的 mod_perl 程序 "disconnect invalidates 1 active statement handle"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/541542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com