gpt4 book ai didi

Perl-SQLite3 : Basic Question

转载 作者:行者123 更新时间:2023-12-03 16:42:37 26 4
gpt4 key购买 nike

我承认我已经有一段时间没有使用 Perl 了,但这让我很难过。

这是问题:

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use DBI;

print "Content-type: text/html\n\n";
print "<html><head><title></title></head></body>";

my $login = "admin@xxxxx.com";
my $dbfile = "/var/www/shopsite-data/shopsite_db";
my $sql = qq`SELECT ss_OrderID FROM ss_ORDER WHERE ss_Email=?`;

my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", "", "") || die "Cannot connect: $DBI::errstr";

my $sth = $dbh->prepare($sql);
$sth->execute($login) or die $sth->errstr();
while (my @result = $sth->fetchrow_array()) {
print "OrderID: $result[0]<br />";
}
$sth->finish;

print "</body>";
print "</html>";
$dbh->disconnect;

什么都不返回,但是当我使用相同的查询通过 sqlite3 登录时得到一个结果集。当我更改查询时,我也会得到一个结果集
my $sql = qq`SELECT ss_OrderID FROM ss_ORDER WHERE ss_Email=?`;


my $sql = qq`SELECT ss_OrderID FROM ss_ORDER`;

最佳答案

明显的问题是双引号内的@:

my $login = "admin@xxxxx.com";
可能会出现
 $login = "admin.com"
并且,如果您打开了警告,则会在日志文件中打印警告,因为 Perl 将 @xxxx 视为一个数组并尝试插入它,然后因为它为空而发出警告。也就是说,假设您没有名为@xxxx 的数组。如果这样做,那么您将在字符串中获得它的所有值。
如果您有电子邮件地址,请在其周围使用单引号以防止将 @xxxx 插入为数组:
my $login = 'admin@xxxxx.com';
或者你可以使用
my $login = "admin\@xxxxx.com";
防止@开始插值。
您的脚本可能还有其他问题,但这是最明显的问题。
奇怪的是 I was just reading about drawbacks of interpolation in Perl .
还有一件事 ...
还有一件事:你已经有了fatalsToBrowser,但是
use warnings;
use strict;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
可能会在你的浏览器上给你一个关于未初始化值的警告,所以它可能值得转 warningsToBrowser直到您的脚本似乎可以正常工作(或者如果它再次停止工作)( documentation here ),而另外两个始终打开。

关于Perl-SQLite3 : Basic Question,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1752859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com