-2

dbi sqlite3 を使用して Perl で作成したデータベースにテーブルを作成できません。以下のコードを使用して、ソース IP とポートごとに 1 行のポート プローブをテーブルに含めます。私がそれを適切に行っているかどうかはわかりません。以下のコードは何らかの理由で機能しません。どんな助けでも大歓迎です。私が持っているコードは次のとおりです。

#!/usr/bin/perl

use strict;
use DBI;

my $dbh = DBI->connect(          
    "dbi:SQLite:dbname=test.db", 
    "",
    "",
    { RaiseError => 1}
) or die $DBI::errstr;


$dbh->do(CREATE TABLE probes (
  source CHAR(15) NOT NULL,
  port CHAR(5) NOT NULL,
  PRIMARY KEY (source,port)) );


$dbh->disconnect();
4

2 に答える 2

2

への引数を引用するのを忘れました$dbh->do。これを行うには多くの方法があります。

$dbh->do( "CREATE TABLE probes ( ..." );
$dbh->do( 'CREATE TABLE probes ( ...' );
$dbh->do( qq[ CREATE TABLE probes ( ... ] );
$dbh->do( <<"END_SQL" );
CREATE TABLE probes (
   ...
END_SQL

追加:この問題を解決するには、$dbh->do関数呼び出し内のものを引用符で囲むだけです。

$dbh->do("CREATE TABLE probes (
  source CHAR(15) NOT NULL,
  port CHAR(5) NOT NULL,
  PRIMARY KEY (source,port))");
于 2013-04-05T02:07:31.753 に答える
0

use warningsまた、すべてのプログラムの先頭にある必要があります。

メソッドに SQL 文字列を指定する必要がありますdoこのように、ヒアドキュメントを使用して複数行の文字列をコーディングするのが一般的です。

$dbh->do(<<'END_SQL');
CREATE TABLE probes (
    source CHAR(15) NOT NULL,
    port CHAR(5) NOT NULL,
    PRIMARY KEY (source, port) )
END_SQL

行の先頭または末尾に空白をEND_SQL含めることはできないこと注意してください。

于 2013-04-05T01:32:35.133 に答える