2013-03-06 39 views
0

我想使用Perl DBI將值插入到Sqlite3表中。我能夠插入硬編碼值沒有任何問題。當我試圖用perl的變量,然後我得到一個錯誤 「DBD :: SQLite的:: DB做失敗:沒有這樣的欄目:」如何將Perl變量插入到Sqlite3中

這工作:

$dbh->do("insert into Gene values (12, 'AAAAAA', 66, 86, 76)"); 

但這個代碼

$dbh->do("INSERT INTO Gene values (NULL, $sequence, $siteNumber, $begin, $length)"); 

引發錯誤

DBD::SQLite::db do failed: no such column 
+4

**不要說「我有錯誤」。總是說「這是我得到的錯誤」,然後告訴我們確切的錯誤。**不要套用它。不要重新輸入。從屏幕上精確剪切並粘貼錯誤消息。 – 2013-03-06 02:01:17

+0

「DBD :: SQLite :: db失敗:沒有這樣的列」是我得到的錯誤。 – user466663 2013-03-06 02:04:19

+2

你想要做的第一件事就是打印INSERT INTO基因值(NULL,$ sequence,$ siteNumber,$ begin,$ length)「;」所以你知道什麼SQL命令正在執行。我們不能神奇地告訴那些4個變​​量的值是什麼。 – 2013-03-06 02:05:38

回答

7

你總是應該prepareexecute你r SQL語句並使用佔位符作爲變量值。

試試這個代碼

my $sth = $dbh->prepare('INSERT INTO Gene VALUES (?, ?, ?, ?, ?)'); 
$sth->execute(undef, $sequence, $siteNumber, $begin, $length); 
+0

謝謝。那是我最終做的! – user466663 2013-03-06 03:09:13

1

您的問題將一直處於$序列,這需要引用是一個有效的SQL字符串中的INSERT語句文字。因此,它認爲你試圖引用一個名爲AAAAAA的列,而不是你想要的字符串「AAAAAA」。 Perl的字符串插值不會爲您添加引號。 (例如,如果你的字符串包含引號字符'?$ dbh-> prepare已經有正確編碼的話'),佔位符和$ dbh-> prepapre是迄今爲止最穩健的解決方案。