2013-04-05 3 views
-3

dbi sqlite3을 사용하여 Perl로 만든 데이터베이스에 테이블을 만드는 데 문제가 있습니다. 아래에있는 코드를 사용하여 테이블에 포트 프로브, 각 소스 IP 및 포트에 대해 한 줄씩 넣어야합니다. 메신저가 제대로하고 있는지, 아래의 코드가 어떤 이유로 작동하지 않는지, 어떤 도움을 주시면 감사하겠습니다. 내가 가진 코드는 다음과 같습니다.SQLite3을 사용하여 Perl에서 데이터베이스 테이블 생성

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

"CREATE"라는 단어 앞에 따옴표를 넣으십시오. 마지막 괄호 뒤에 일치하는 따옴표를 넣으십시오. 견적서가 여러 줄에 걸쳐 있으면 괜찮습니다. – mob

+0

나는 당신이 의미하는 것을 이해하지 못한다. 나는이 유형의 물건에 초보자이다. 이미 위에있는 코드 나 다른 코드를 추가 코드와 함께 표시 할 수 있습니까? – user218001

1

모든 프로그램 상단에는 use warnings도 있어야합니다.

do 메서드에 SQL 문자열을 제공해야합니다. 여기의 문서을 사용하여 여러 줄 문자열을 코딩하는 것이 일반적입니다.

$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 파일 \ test.pl 줄 14에 구문 오류가 있습니다. – user218001

+0

그 코드는 저에게 효과적입니다. 공백은 기본적으로이 문맥에서 스페이스 또는 탭을 의미합니다. 'END_SQL'은 왼쪽 여백에 대해 들여 쓰기되지 않아야하며 줄 끝 부분 앞에 공백이나 탭이 없어야합니다. – Borodin

+0

아래의 우리에 따르면, 나는 논쟁을 추가하지 않았다. 그것에 대한 당신의 의견은 무엇입니까 – user218001