作者DarkKiller (System hacked)
看板perl
标题Re: [问题] 关於一支无限回圈的程式
时间Tue Oct 2 23:23:33 2007
※ 引述《wnick (浅龙勿用)》之铭言:
先回最後一行:
: 这样大家看得懂吗>\\\<
铁定看不懂,在没有颜色标示,而且程式没有把过度重复的部份拆成 sub 会让
人看的很累。
所以我只先随便翻一下...
: my $dbh = DBI->connect("dbi:mysql:database=dorm;host=*.*.*.*", "guest",
: "guest") or die $DBI::errstr;
第一个有可能的问题是 MySQL 的 timeout,这个部份 DBD::mysql 有支援断线
重连的选项,请把 DSN 加上 mysql_auto_reconnect=1,变成:
"dbi:mysql:database=dorm;host=1.2.3.4;mysql_auto_reconnect=1"
: $sth_update = $dbh->prepare("UPDATE dorm_flow SET
: in_octets = '$value_in', in_avg = '$in_avg', out_octets = '$value_out',
: out_avg = '$out_avg' WHERE s_ip = '$host' AND s_port = '$db_result[0]'");
: $sth_update->execute();
另外,DBI 的 prepare + execute 是非常好用的武器,请不要自己包变数,比
较好的用法是:
$sth = $dbh->prepare("UPDATE dorm_flow SET in_octects = ?, in_avg = ?, out_octets = ?, out_avg = ? WHERE s_ip = ? AND s_port = ?");
$sth->execute($value_in, $in_avg, $value_out, $out, $host, $db_result[0]);
而且 $sth 可以重复使用,放到最外面先 prepare 好以後就可以不断的用。如
果你要直接写某个没有变数的 operation,请用 "do":
$dbh->do("DELETE * FROM user WHERE account_valid = 0;");
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.54.119
※ 编辑: DarkKiller 来自: 140.113.54.119 (10/02 23:25)
1F:推 wnick:感谢大大的指导......我再研究研究~~~~顺便把可能的问题回 10/03 00:09
2F:→ wnick:在下一篇 10/03 00:09