怎么才能让它起作用呢

怎么才能让它起作用呢

怎么才能让它起作用呢
if(($ENV{'REQUEST_METHOD'} eq "POST") || ($ENV{'REQUEST_METHOD'} eq "post"))
{
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
else
{
$buffer = $ENV{'QUERY_STRING'};
}

@words = split("&",$buffer);
for($i = 0; $i < @words; $i++)
{
($id,$value) = split("=",$words[$i]);
$value =~ s/;//;
print("$value<br>");
}
#@@
print ($q);
#@@
use DBI;

# connect
my $dbh = DBI->connect("DBI:mysql:database=newuser;host=localhost", "root", "", {'RaiseError' => 1});
print"<table>\n";
print "ok";
my $sth = $dbh->prepare("SELECT result FROM user WHERE id = $q");
$sth->execute();
while (my $line = $sth->fetchrow_hashref) {
print $line->{result};
}
print"</table>\n";

代码中的这一句my $sth = $dbh->prepare("SELECT * FROM user WHERE id = $q");中那个$q是我从上一页中得到的值,前面那个print ($q);能够正常显示其数值,但是在这句里就不行了,如果我把它换成一个数字就可以。这是为什么呢??




   

语句内插后,不符合sql规范
在sql里面字符串必须有引号

最简单的解决办法,但是并不完美,也不安全(易被SQL注入)
my $sth = $dbh->prepare("SELECT * FROM user WHERE id = '$q'"); # 确保$q中不含单引号

另外一解决方法
my $sth = $dbh->prepare("SELECT * FROM user WHERE id = " . $dbh->quote("$q") );

怎么才能让它起作用呢
终于找到原因了,原来是是赋值的问题。 学习过程真是开心-低谷-开心-。。。。




   

除了2楼第二个办法比较规范外,最好的办法是
my $sth = DBI -> connect("SELECT * FROM user WHERE id = ?");
$sth -> execute($p);
这样方便重复用,当需要处理的数据比较多时
这个……写错了,是Prepar.
这个……写错了,是Prepare不是Connect……