使用Perl程序在MySQL的列中插入多行

使用Perl程序在MySQL的列中插入多行,mysql,sql,perl,placeholder,multiple-entries,Mysql,Sql,Perl,Placeholder,Multiple Entries,我想使用一个查询在一列中插入多行数据。此程序用于更少的数据。我有另一个weather monitoring.txt文件,它有4000行数据。我可以一次插入一个数据,但对于如此多的数据值来说,这会变得单调乏味 1. use DBI; 2. use DBD::mysql; 3. use warnings; 4. $connection = ConnectToMySql($database); 5. # Multiple Data inputs 6.

我想使用一个查询在一列中插入多行数据。此程序用于更少的数据。我有另一个weather monitoring.txt文件,它有4000行数据。我可以一次插入一个数据,但对于如此多的数据值来说,这会变得单调乏味

1.     use DBI;
2.     use DBD::mysql;
3.     use warnings;


4.     $connection = ConnectToMySql($database);

5.   # Multiple Data inputs
6.      $myquery = "INSERT INTO data(datatime,battery)
7.           VALUES
8.             (?,?),
9.             ('16.01.2013','6.54'), #data corresponding to date and battery
10.             ('17.01.2013','6.42'),
11.             ('21.01.2013','6.24'),
12.             ('22.01.2013','6.21'),
13.             ('24.01.2013','6.17'),
14.             ('25.01.2013','6.13'),
15.             ('28.01.2013','6.00'),
16.             ('29.01.2013','5.97'),
17.             ('30.01.2013','5.94'),
18.             ('01.02.2013','5.84')";
19.    $statement2 = $connection->prepare($myquery);

20.     $statement2->execute($myquery);

21.    #--- start sub-routine
22.    sub ConnectToMySql {
23.       $database ="xxxx";
24.       $user = "XXXX";
25.       $pass = "XXXX";
26.       $host="XXXX";
27.    my $dbh = DBI->connect("DBI:mysql:$database:$host", $user, $pass);
28.    }
此代码给了我以下错误:

DBD::mysql::st execute失败:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在C:/Users/User/workspace/DataBaseEntry/DataEntry.pl第20行第2行的“”附近使用的正确语法。
DBD::mysql::st execute失败:在C:/Users/User/workspace/DataBaseEntry/DataEntry.pl第40行需要2个绑定变量时,使用1个绑定变量调用

我无法确定问题所在。是占位符吗。我能做些什么来改进它? 我对这些东西不熟悉。所以你可以保持简单。
谢谢

$connection->do(
$connection->do(您应该将数据值作为参数传递给
执行
。您编写的代码只将单个参数传递给
执行
,该参数是查询的SQL文本

请尝试以下方法:

$myquery = "INSERT INTO data(datatime,battery) VALUES (?,?)";
my $sth = $connection->prepare($myquery);

$sth->execute('16.01.2013','6.54');
$sth->execute('17.01.2013','6.42');
$sth->execute('21.01.2013','6.24');
$sth->execute('22.01.2013','6.21');
$sth->execute('24.01.2013','6.17');
$sth->execute('25.01.2013','6.13');
$sth->execute('28.01.2013','6.00');
$sth->execute('29.01.2013','5.97');
$sth->execute('30.01.2013','5.94');
$sth->execute('01.02.2013','5.84');

您应该将取代
(?,?)
的数据值作为参数传递给
执行
。您编写的代码只将单个参数传递给
执行
,该参数是查询的SQL文本

请尝试以下方法:

$myquery = "INSERT INTO data(datatime,battery) VALUES (?,?)";
my $sth = $connection->prepare($myquery);

$sth->execute('16.01.2013','6.54');
$sth->execute('17.01.2013','6.42');
$sth->execute('21.01.2013','6.24');
$sth->execute('22.01.2013','6.21');
$sth->execute('24.01.2013','6.17');
$sth->execute('25.01.2013','6.13');
$sth->execute('28.01.2013','6.00');
$sth->execute('29.01.2013','5.97');
$sth->execute('30.01.2013','5.94');
$sth->execute('01.02.2013','5.84');

你知道你不能在双引号的字符串中使用注释,对吗?确实如此。
#data corre…
应该是
--data corre…
很抱歉回复太晚了,但我后来发现了。汉克斯。你知道你不能在双引号的字符串中使用注释,对吗?确实。
#data corre…
应该是
--data co>rre…
很抱歉回复得太晚,但我后来才明白。不管怎样,汉克斯。非常感谢。它成功了。如果您能告诉我,将txt或电子表格中的数据转换为csv文件是否更明智,而不是对大量数据执行这样的数据,然后使用perl?sumee中的程序将其上传到数据库中t:就我个人而言,是的,我会这样做。将数据转换为CSV格式,然后使用Perl程序一次读取一行数据,并将该行中的值传递到
execute
调用中。非常感谢。这很有效。如果您能告诉我将txt或电子表格中的数据转换为CSV文件是否更明智她会对大量数据执行这样的数据,然后使用perl程序将其上传到数据库?@sumeet:就我个人而言,是的,我会这样做。将数据转换为CSV格式,然后使用perl程序一次读取一行数据,并将该行的值传递到
execute
调用中。