2013-06-05 3 views
-2

Я пытаюсь вставить данные, созданные perl в таблицу базы данных oracle, используя Perl DBI. Это первый раз, когда я пробовал это, поэтому, вероятно, я делаю простую ошибку.Вставка данных из perl в mysql

Что я использую в данный момент:

$dbh = DBI->connect ('dbi:Oracle:geosgen','student','train') 
    || die "Database connection not made: $DBI::errstr"; 

    $sql = "INSERT INTO MYTEST VALUES ($series, $sheet, $maxlat, $minlat, $maxlong, $minlong)"; 

    $create = $dbh->do($sql); 
    print "Content-type:text/html\n\n\n"; 
if($Create){ 
print "Success"; 
} 
else{ 
print "Failure<br/>$DBI::errstr"; 
} 

и выход я получаю так:

DBD::Oracle::db do failed: ORA-00917: missing comma (DBD ERROR: error possibly near <*> indicator at char 36 in 'INSERT INTO MYTEST VALUES (Scotland <*>one inch 1st, Shetland Islands (North) (131), -0.6800, -1.4100, 60.9700, 60.6900)') [for Statement "INSERT INTO MYTEST VALUES (Scotland one inch 1st, Shetland Islands (North) (131), -0.6800, -1.4100, 60.9700, 60.6900)"] at bruce1.pl line 69, <INPUT> line 924. Content-type:text/html

означает, что он прочитал данные в успешно, но не удалось. Я ожидаю, что я сделал ошибку новобранец, есть ли что-то очевидное?

+2

Разве вы не знаете, что интерполяция переменных в запрос опасна? Пожалуйста, рассмотрите возможность использования параметризованных операторов, где это возможно: 'my $ sth = $ dbh-> prepare ('INSERT ... (?,?, ...)'); $ sth-> execute ($ series, $ sheet, ...); '. Кроме того, переменные Perl чувствительны к регистру: '$ create' и' $ Create' не связаны. – amon

ответ

4

SQL требует буквенные константы котироваться:

INSERT INTO MyTest VALUES ('Шотландия один дюйм 1', 'Шетландские острова (север) (131)', -0,6800, -1,4100, 60,9700, 60.6900)

Если вы напечатаете значение $ sql, вы увидите, что это не так.

+0

Да, но если вы используете контрольные точки в запросе yor, вам не нужно беспокоиться о цитировании строк. –