【问题标题】:DBD::mysql fetchrow_array failed: fetch() without execute()?DBD::mysql fetchrow_array 失败:没有 execute() 的 fetch()?
【发布时间】:2013-09-19 22:33:52
【问题描述】:

我收到以下代码的错误:

#!C:/usr/bin/perl -w

use CGI;
use strict;
use DBI();
use CGI::Carp qw(fatalsToBrowser);


print "content-type: text/html; charset=iso-8859-1\n\n";

my $q=new CGI;
my $ename=$q->param('ename');
my $email=$q->param('email');

print $q->header;
print "<br>$ename<br>";


#connect to database.
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost","root","mukesh",
          {'RaiseError' => 1});

eval {$dbh->do("CREATE TABLE IF NOT EXISTS emp (ename VARCHAR(20), email VARCHAR(50))")};
print "<br>creating table emp failed: $@<br>" if $@;


my $sql="INSERT INTO emp(ename,email) values('$ename','$email')";

my $sth = $dbh->prepare($sql) or die "Can't prepare $sql:$dbh->errstrn";
#pass sql query to database handle


my $rv = $sth->execute() or die "can't execute the query: $sth->errstrn";

my @row;
while (@row = $sth->fetchrow_array) {
print join(", ",@row);
}

$sth->finish();
$dbh->disconnect();

if ($rv==1){
print "<br>Record has been successfully updated !!!<br>";
}else{
print "<br>Error!!while inserting record<br>";
exit;
}

请提出建议。有什么问题。 如果我删除这段代码,它工作正常。

my @row;
while (@row = $sth->fetchrow_array) {
print join(", ",@row);
}

【问题讨论】:

    标签: mysql windows perl apache cgi


    【解决方案1】:

    您正在尝试在 DBI 中使用常见的 SELECT 循环 - 准备、执行、获取 - 用于 non-select 查询(在您的情况下为 INSERT)。您可能应该做的是直接检查execute 的结果。引用the doc:

    对于非 SELECT 语句,execute 返回行数 受影响,如果知道的话。如果没有行受到影响,则执行返回 “0E0”,Perl 将其视为 0,但将其视为 true。注意 没有行受语句影响不是错误。如果 受影响的行数未知,然后执行返回-1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2016-04-11
      • 2019-07-15
      • 2020-06-01
      相关资源
      最近更新 更多