2013-04-05 3 views
-3

У меня возникли проблемы с созданием таблицы в базе данных, созданной с помощью Perl, с использованием dbi sqlite3. Используя приведенный ниже код, я хочу, чтобы в таблице содержались пробники портов, одна строка для каждого источника ip и порта. Я не знаю, будет ли им делать это правильно, код ниже не работает по какой-либо причине, любая помощь будет принята с благодарностью. Код у меня следующий.Создание таблицы в базе данных из Perl с использованием SQLite3

#!/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

Что вы хотите сказать? – Borodin

+0

Код, который у меня есть, не работает, видите ли вы, что с ним не так – user218001

+3

* Не работает * не очень четкое описание. Что говорит вам, что он не работает? – Borodin

ответ

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))"); 
+0

можете ли вы включить один из них в мой код или код borodin, чтобы я мог видеть, как это делается, например, как позиционировать аргументы. – user218001

+0

Поместите цитату перед словом «СОЗДАТЬ». Поместите соответствующую цитату после последней скобки. Это нормально, если цитата охватывает несколько строк. – mob

+0

Я не понимаю, что вы имеете в виду, я новичок в этом типе вещей. вы можете показать мне код, который у меня уже есть на вершине или с дополнительным кодом, который предоставил другой человек – user218001

1

Вы также должны иметь 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 линия не может содержать каких-либо пробелы в начале или конце строки.

+0

Я получил следующие ошибки: DBD :: SQLite :: db do failed: рядом с « »: синтаксическая ошибка в папке C: \ Users \ Abdullah \ Documents \ Perl \ test.pl 14. Что именно вы подразумеваете под пробелом ? DBD :: SQLite :: db do failed: рядом с « »: ошибка синтаксиса в C: \ Users \ Abdullah \ Documents \ Perl files \ test.pl строка 14. – user218001

+0

Этот код работает для меня. Пробелы в основном означают пробелы или вкладки в этом контексте. 'END_SQL' должен быть против левого поля и не иметь отступов, и перед ним не должно быть пробелов или вкладок до конца строки. – Borodin

+0

в соответствии с нижеследующим ниже, я не добавил ARGUMENTS, каково ваше мнение об этом – user218001

Смежные вопросы