我在使用dbi sqlite3使用Perl创建的数据库中创建表时遇到问题。使用下面的代码,我希望表包含端口探测器,每个源ip和端口一行。我不知道如果我正确地做到了,下面的代码由于某种原因不起作用,任何帮助将不胜感激。我的代码如下。
#!/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();
答案 0 :(得分:1)
您还应该在每个程序的顶部都有use warnings
。
您需要为do
方法提供SQL字符串。通常使用 here document 来编写多行字符串,如下所示。
$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
行不能在行的开头或结尾包含任何空格。
答案 1 :(得分:1)
你忘了引用$dbh->do
的论点。有many种方法可以做到这一点。
$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))");