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