2012-10-13 4 views
0

사용자 입력을 기반으로 MySQL에서 테이블을 만들려고합니다. 이상적으로 Perl 스크립트는 데이터베이스에 연결하여 사용자로부터받은 변수가있는 테이블을 생성합니다. 여기 내 스크립트입니다 :MySQL에서 Perl을 사용하여 변수를 사용하여 테이블을 만들 때 문제가 발생했습니다.

DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 at /path/to/scripts/dbTest.pl line 28, <> line 2. 
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(column VARCHAR(17))' at line 1 at /path/to/scripts/dbTest.pl line 29, <> line 2. 

라인 (28)은 DROP 명령은 다음과 같습니다

print "Please enter a name for the table: "; 
$tableName = <>; 
chomp($tableName); 
&createTable ($tableName); 

sub createTable 
{ 
    use DBI; 
    my $platform = "mysql"; 
    my $database = "example"; 
    my $host = "localhost"; 
    my $user = "user"; 
    my $pw = "pw"; 
    my $dsn = "dbi:$platform:$database:$host"; 
    my $dbh = DBI->connect($dsn, $user, $pw) or die "Unable to connect: $DBI::errstr\n"; 
    $dbh->do("DROP TABLE IF EXISTS $_"); 
    $dbh->do("CREATE TABLE $table (column VARCHAR(17))"); 
    $dbh->disconnect; 
} 

하지만 스크립트를 실행하고 값을 입력 할 때 (의는 '테스트'라고하자), 그것은 나에게이 다시 누설한다 , 29 행은 CREATE 명령입니다. 구문을 많이 확인했지만 오류가 발생한 위치를 얻지 못하고 있습니다. 나는 그렇게 단순한 것을 내려다보고 있는가 ..?

답변

1

것을보십시오 : 당신은 당신의 기능에 그런 $_을 사용할 수 없습니다

use warnings; use strict; 
use DBI; 
print "Please enter a name for the table: "; 
$tableName = <>; 
chomp($tableName); 
createTable($tableName); 

sub createTable { 
    my $table = shift; 

    my $platform = "mysql"; 
    my $database = "example"; 
    my $host = "localhost"; 
    my $user = "user"; 
    my $pw = "pw"; 
    my $dsn = "dbi:$platform:$database:$host"; 
    my $dbh = DBI->connect($dsn, $user, $pw) 
     or die "Unable to connect: $DBI::errstr\n"; 
    $dbh->do("DROP TABLE IF EXISTS $table"); 
    $dbh->do("CREATE TABLE $table (column VARCHAR(17))"); 
    $dbh->disconnect; 
} 

. 대신 @_을 처리해야합니다 (또는 제가 사용하는 것처럼 shift을 사용하십시오). perldoc perlsub

+0

음, 확실히 트릭을 했어! @_, $ _ [0-inf] 및 $ _를 서로 바꿔서 사용할 수는 있지만 어딘가에서 읽은 것 같습니다. 내가 그 일에 대해 오해 한 것이 아니라면. [여기] (http://www.comp.leeds.ac.uk/Perl/subroutines.html) "매개 변수"섹션 바로 아래. 이제는 그가 사용할 수 있다는 것을 알았지 만, 인수가 서브 루틴으로 전달 된 것은 아닙니다. 감사합니다. – Arkevius

+0

'$ _'가 기본 변수입니다. '@ _'가 기본 배열입니다. '$ _ [1]'은'@ _' 배열의 두번째 요소입니다. –