人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PERLでMYSQLにデータが入りません。

Web::Scraperで取得したデータを配列に入れて
ループを使ってMYSQLに入れたいのですが、データがなぜか入りません

DB、SQLの接続チェックではエラーはでず
ループの外においても動きません
なぜ、動かないか原因がわからず困っています。

どこに間違いがあるか教えてください

my $dsn = 'DBI:mysql:rank:localhost';
# ユーザ名
my $user = 'ユーザID';
# パスワード
my $password = 'パス';

$dbh = DBI->connect($dsn, $user, $password);

if(!$dbh){
print "接続失敗\n";
exit;
}
省略
my $scr = $scraper->scrape($url);
foreach my $scr_data (@{$scr->{src}}) {
my $sql = "update rankdata set ";
$sql .= "rank='" . $scr_data->{RANK} . "',";
$sql .= "name='" . $scr_data->{name} . "'";

$sth = $dbh->prepare($sql);
$sth->execute;
}
$sth->finish;
$dbh->disconnect;

●質問者: robopit
●カテゴリ:ウェブ制作 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY
●100ポイント ベストアンサー

prepare に渡す $sql の中身は多分、

update rankdata set rank='1',name='abc'

といった具合になると思いますが、これは意図したものになってますか?

この SQL だと、rankdata テーブルのすべてのレコードに対して、rank を '1' に、name を 'abc' にする、という意味になります。ということは、rankdata が空であれば何も起きないし、すでにレコードがあっても、rank と name が、foreach で最後に取り出された時の値で、すべてのレコードが更新されることになります。

ひょっとして、insert したかったのでは?

foreach my $scr_data (@{$scr->{src}}) {
 my $sql = "insert into rankdata (rank, name) values (";
 $sql .= "'" . $scr_data->{RANK} . "',";
 $sql .= "'" . $scr_data->{name} . "')";

 $sth = $dbh->prepare($sql);
 $sth->execute;
}

robopitさんのコメント
そのとおりです。 必要だったのはinsertでした。お恥ずかしい限りです
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ