免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2355 | 回复: 10
打印 上一主题 下一主题

[新手求助]perl脚本错误,请高手帮忙解决 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-05 12:29 |只看该作者 |倒序浏览
小弟第一次接触perl,按照网上的例子执行下面的perl脚本,
提示在INSERT INTO address (id, name,email,telephone) VALUES (?, ?, ?, ?)});出错,
脚本全文如下:


#!/usr/bin/perl
use DBI;

#连接数据库mydata

my $dbh = DBI->connect('DBI:mysql:mydata') or die "无法连接数据库: " . DBI->errstr;

print "插入若干记录\n";

my $sth = $dbh->prepare(q{

INSERT INTO address (id, name,email,telephone) VALUES (?, ?, ?, ?)
});

print "输入记录,回车结束:";

while ($inputdata =<> {

chop $inputdata;

last unless($inputdata);

my ($id, $name,$email, $tel) = split( /,/, $inputdata);

$sth->execute($id, $name, $email,$tel)

}

# $dbh->commit;

print "下面根据输入的名字打印出EMAIL地址和电话\n";

my $sth = $dbh->prepare('SELECT * FROM address WHERE name=?')

or die $dbh->errstr;

print "请输入姓名,回车结束:";

while ($inputname =<> {

my @data;

chomp $inputname;

last unless($inputname);

$sth->execute($inputname) or die "错误: " . $sth->errstr;

while (@data = $sth->fetchrow_array()) {

print "Emaildata[2]\t Telephonedata[3]\n";

}

}

#断开连接

$dbh->disconnect;

请各位高手帮忙解释一下:
1.那问号什么意思?为什么出错
2.该怎样解决?
万分感谢!!

论坛徽章:
0
2 [报告]
发表于 2006-11-05 13:31 |只看该作者
INSERT INTO address (id, name,email,telephone) VALUES (?, ?, ?, ?)});
?即
变量id ,name ,email, telephone对应该的值,你应给出具体的值吧?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2006-11-05 13:42 |只看该作者
插入之前,数据库打开成功了吗

论坛徽章:
4
处女座
日期:2013-09-01 19:30:07双鱼座
日期:2013-09-28 10:58:45双子座
日期:2014-05-23 08:32:0215-16赛季CBA联赛之八一
日期:2016-04-12 19:55:42
4 [报告]
发表于 2006-11-05 17:59 |只看该作者
xx.pl

#!/usr/bin/perl
use DBI;
$dbh = DBI->connect("DBI:mysql:human:192.168.100.1",'root','orf');
$sth = $dbh->prepare("insert into address (id,name,email,telephone) values (?, ?, ?, ?)");
$sth->execute(1,'Darwin','darwin@163.com','021-12345678');

-----------------------------------------
mysql> use human;
Database changed

mysql> select * from address;
Empty set (0.00 sec)

:\>xx.pl

mysql> select * from address;
+------+--------+----------------+--------------+
| id   | name   | email          | telephone    |
+------+--------+----------------+--------------+
|    1 | Darwin | darwin@163.com | 021-12345678 |
+------+--------+----------------+--------------+
1 row in set (0.00 sec)

[ 本帖最后由 atgc 于 2006-11-5 18:04 编辑 ]

论坛徽章:
4
处女座
日期:2013-09-01 19:30:07双鱼座
日期:2013-09-28 10:58:45双子座
日期:2014-05-23 08:32:0215-16赛季CBA联赛之八一
日期:2016-04-12 19:55:42
5 [报告]
发表于 2006-11-05 18:09 |只看该作者
我的数据库名和你的不一样的,你自己改改代码

论坛徽章:
4
处女座
日期:2013-09-01 19:30:07双鱼座
日期:2013-09-28 10:58:45双子座
日期:2014-05-23 08:32:0215-16赛季CBA联赛之八一
日期:2016-04-12 19:55:42
6 [报告]
发表于 2006-11-05 18:12 |只看该作者
你得首先保证数据库连接是可以的,

才能保证你的程序可以执行

还有,你有没有安装 DBI和DBD啊


Perl\bin\ppm
出现ppm>
然后
ppm>install DBI

ppm>install DBD-mysql

[ 本帖最后由 atgc 于 2006-11-5 18:19 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-11-05 20:07 |只看该作者
原帖由 alexru 于 2006-11-5 13:31 发表
?即
变量id ,name ,email, telephone对应该的值,你应给出具体的值吧?


是占位符,以前用PHP的PDO的时候用过
$sth->execute($id, $name, $email,$tel) 在这里被对应赋值

论坛徽章:
0
8 [报告]
发表于 2006-11-06 08:41 |只看该作者
谢谢各位的解答,按照atgc兄的方法可以实现,
还想问一下,在my $dbh ;my $sth中,$dbh,$sth是变量,那个my是什么啊?请大家再帮忙解答一下,谢谢!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-11-06 08:51 |只看该作者
my是宣告的一种...主要是作用域不同...
有空看看perl的书吧...

论坛徽章:
0
10 [报告]
发表于 2006-11-06 08:55 |只看该作者
词法变量
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP