1

我正在尝试运行简单的 perl dbi 示例脚本来连接到 mysql 数据库并进行一些插入。

代码:

#! bin/usr/perl -w

use strict;
use warnings;

use DBI();
my $dbh = DBI->connect(
    "DBI:mysql:database=SPM;host=IP Address", "username", "password",
    {'RaiseError'=>1}
);

my $dbh->do(
    'INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)'
);
my $dbh->disconnect();

但是当我尝试使用它运行它时,perl filename.pl我得到了关注

Can't call method "do" on an undefined value at perldbi.pl line 12

那是我do第一次使用的地方。

我试图用谷歌搜索它,也尝试过所有不同类型的论坛,但都是徒劳的.

4

4 回答 4

10

你有一个额外的my

my $dbh->do(
    'INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)'
);

摆脱那个my

您要么没有真正warnings在脚本中启用,要么忽略了警告:

#!/usr/bin/perl

use strict;
use warnings;

my $x = 1;
my $x = 2;
C:\温度> t
“我的”变量 $x 掩盖了在同一范围内的早期声明...
于 2009-11-05T15:58:34.460 回答
2

我怀疑这是错误消息的原因,但插入中的值可能不正确:

  VALUES(CASH, DOLLAR)

应该是:

  VALUES(\'CASH\', \'DOLLAR\')

是必需的\,因为您使用的是'样式字符串。如果您改用"样式字符串,则可以省略\

 "... VALUES('CASH','DOLLAR')"
于 2009-11-05T15:58:31.300 回答
1

您的数据库连接失败。所以$dbh是未定义的。

更新:两个评论都是正确的。思南有正确的答案——OP 在每一行都使用我的。

于 2009-11-05T15:34:07.387 回答
1

正如 daotoad 所说,您的DBI->connect通话失败。检查您的连接设置,查看是否可以从命令行连接到数据库等。在您的 Perl 脚本中,始终检查返回值DBI->connect()以查看连接是否成功。

my $dbh = DBI->connect("DBI:mysql:database=SPM;host=IP Address",...)
          or die sprintf( 'connect() failed. Error: %s', DBI->errstr);

my $dbh->do(q{
   INSERT INTO payment_methods(name, description)VALUES(CASH, DOLLAR)
});
...
于 2009-11-05T15:46:23.023 回答