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:\Temp> t
「my」変数 $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も同様です。

更新:どちらのコメントも正しいです。Sinan には正解があります。OP はすべての行で my を使用しています。

于 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 に答える