2

1 つのクエリを使用して、複数行のデータを 1 つの列に挿入したいと考えています。このプログラムは少ないデータ用です。4000 行のデータを含む別の気象監視 .txt ファイルがあります。一度に 1 つのデータを挿入することはできますが、データ値が非常に多い場合は面倒です。

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 の実行に失敗しました: SQL 構文にエラーがあります。C:/Users/User/workspace/DataBaseEntry/DataEntry.pl 行 20 の行 2 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。DBD
::mysql::st の実行に失敗しました: C:/Users/User/workspace/DataBaseEntry/DataEntry.pl 行 40 で 2 つが必要なときに、1 つのバインド変数で呼び出されます。

問題を特定できません。プレースホルダですか。改善するにはどうすればよいですか?私はこれらのことに慣れていません。シンプルに保つことができます。ありがとう

4

2 に答える 2

3

(?, ?)as パラメータを に置き換えるデータ値を渡す必要がありますexecute。記述されたコードは単一のパラメーターのみを渡し、executeそのパラメーターはクエリの 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');
于 2013-02-04T12:28:15.940 に答える
2
$connection->do(<<'EOT');
  INSERT INTO data (datatime, battery)
  VALUES
    ('17.01.2013', '6.42'),
    ('21.01.2013', '6.24'),
    ('22.01.2013', '6.21'),
    ('24.01.2013', '6.17'),
    ('25.01.2013', '6.13'),
    ('28.01.2013', '6.00'),
    ('29.01.2013', '5.97'),
    ('30.01.2013', '5.94'),
    ('01.02.2013', '5.84')
EOT

ここでプレースホルダーを使用して何をしようとしているのかわかりません。

また、 が欠落use warnings; use strict;しており、どこでもグローバル変数を使用しないでください。

于 2013-02-04T12:28:04.617 に答える