Perl DBD::CSV - SQL 语法 - “AND”子句无法正常工作

2023-12-19

我在 Ubuntu 10.04 上运行 Perl 5.10 并使用 perl DBI 模块。 我试图在 Perl DBI 下的 SQL 查询中的“WHERE”子句中使用“AND”条件。我正在使用 DBD::CSV 驱动程序。

请考虑以下 test.csv:

OS,RELEASE,VERSION
Ubuntu,Warty,4
Ubuntu,Hoary,5
Ubuntu,Breezy,5
Fedora,Yarrow,1
Fedora,Tettnang,2
Fedora,Stentz,4

在这里我想检索 Fedora Stentz 的版本。 这是我的代码:

#!/usr/bin/perl -w

use strict;
use DBI;

my $table = "test.csv";

my $dbh = DBI->connect ("dbi:CSV:") or die "Cannot connect to the CSV file: $DBI::errstr()";
$dbh->{RaiseError} = 1;
$dbh->{TraceLevel} = 0;

my $query = "select VERSION from $table where OS='Fedora' and RELEASE='Yarrow'";
my $sth = $dbh->prepare ($query);
$sth->execute ();
$sth->dump_results();
$sth->finish();
$dbh->disconnect();

这是输出;

0 rows

如果我在查询中使用占位符而不是实际值,如下所示:

my $query = "select VERSION from $table where OS=? and RELEASE=?";
my $sth = $dbh->prepare ($query);
$sth->execute ('Fedora', 'Yarrow');
$sth->dump_results();
$sth->finish();
$dbh->disconnect();

那么输出是一个错误,如下所示:

DBD::CSV::st execute failed: You passed 2 parameters where 0 required [for Statement "select VERSION from test.csv where OS=? and RELEASE=?"] at count.pl line 14.
DBD::CSV::st execute failed: You passed 2 parameters where 0 required [for Statement "select VERSION from test.csv where OS=? and RELEASE=?"] at count.pl line 14.

但是,如果我在 WHERE 子句中仅使用一个条件(如下所示),那么脚本会给出正确的输出:

my $query = "select VERSION from $table where OS=?";
my $sth = $dbh->prepare ($query);
$sth->execute ('Fedora');
$sth->dump_results();
$sth->finish();
$dbh->disconnect();

输出是:

'1'
'2'
'4'
3 rows

所以,底线和我的问题是,当我在“where”子句中写入“and”条件时,它不起作用。我怀疑我的查询语法有问题,但还无法弄清楚。任何指示或建议都会有很大帮助。

另外,我在 perlmonks 上有一个针对同一问题的持续线程:http://www.perlmonks.org/?node_id=990214 http://www.perlmonks.org/?node_id=990214

Thanks.


你所有的片段都适合我。确保您的模块是最新的。从开发::版本转储 http://search.cpan.org/perldoc?Devel%3a%3aVersionDump(退出时调用):

Perl version: v5.16.0 on linux (/home/eric/usr/perlbrew/perls/5.16.0t/bin/perl)
AutoLoader                      -     5.72
Carp                            -     1.26
Clone                           -     0.31
Config                          -  Unknown
Cwd                             -  3.39_02
DBD::CSV                        -     0.36
DBD::File                       -     0.40
DBI                             -    1.620
DBI::DBD::SqlEngine             -     0.03
DBI::SQL::Nano                  - 1.014600
Data::Dumper                    - 2.135_06
Devel::VersionDump              -     0.02
DynaLoader                      -     1.14
Errno                           -     1.15
Exporter                        -     5.66
Exporter::Heavy                 -     5.66
Fcntl                           -     1.11
File::Basename                  -     2.84
File::Spec                      -  3.39_02
File::Spec::Unix                -  3.39_02
IO                              -  1.25_06
IO::File                        -     1.16
IO::Handle                      -     1.33
IO::Seekable                    -      1.1
List::Util                      -     1.23
Params::Util                    -     1.07
SQL::Dialects::AnyData          -     1.33
SQL::Dialects::Role             -     1.33
SQL::Eval                       -     1.33
SQL::Parser                     -     1.33
SQL::Statement                  -     1.33
SQL::Statement::Function        -     1.33
SQL::Statement::Functions       -     1.33
SQL::Statement::Operation       -     1.33
SQL::Statement::Placeholder     -     1.33
SQL::Statement::RAM             -     1.33
SQL::Statement::Term            -     1.33
SQL::Statement::TermFactory     -     1.33
SQL::Statement::Util            -     1.33
Scalar::Util                    -     1.23
SelectSaver                     -     1.02
Symbol                          -     1.07
Text::CSV_XS                    -     0.91
Tie::Hash                       -     1.04
XSLoader                        -     0.16
base                            -     2.18
bytes                           -     1.04
constant                        -     1.23
overload                        -     1.18
overloading                     -     0.02
sort                            -     2.01
strict                          -     1.07
unicore::Heavy.pl               -  Unknown
unicore::lib::Perl::Word.pl     -  Unknown
unicore::lib::Perl::_PerlIDS.pl -  Unknown
utf8                            -     1.09
utf8_heavy.pl                   -  Unknown
vars                            -     1.02
warnings                        -     1.13
warnings::register              -     1.02
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl DBD::CSV - SQL 语法 - “AND”子句无法正常工作 的相关文章

  • 如何在 Perl 中将多个哈希值合并为一个哈希值?

    在 Perl 中 我如何得到这个 VAR1 999 gt 998 gt 908 906 0 998 907 VAR1 999 gt 991 gt 913 920 918 998 916 919 917 915 912 914 VAR1 99
  • Perl 如何存储/处理非常大的数字?是否应该使用模块来代替 Perl 的默认处理方法?

    我需要添加 50 位数字 因此我将它们作为 字符串 处理 并编写了自己的函数将它们相加 后来 为了它的地狱 我尝试了这个 readFile shift ARGV sub readFile my file shift contains a b
  • 将日期转换为指定格式并比较两个日期

    给定两个日期 Date1 format yyyy mm dd hh mm ss eg 2013 05 21 07 47 21 Date2 format Day Month date hh mm ss yyyy eg Thu Aug 1 09
  • 如何将 cpanminus 与本地 CPAN::Mini 一起使用?

    我已经创建了自己的 CPAN 本地副本minicpan http search cpan org rjbs CPAN Mini 1 111007 bin minicpan并设法重新配置 cpan 来使用它 太棒了 但是我将如何使用它cpan
  • SFTP文件同时上传和下载

    cronjob 每 3 小时运行一次 使用 SFTP 下载文件 调度程序是用Perl编写的 使用的模块是Net SFTP Foreign Can the Net SFTP Foreign下载仅使用 SFTP 部分上传的文件 如果是这样 我们
  • 从 Perl 线程生成 Expect

    我正在编写一个脚本 该脚本需要定期 每 5 分钟 生成一个 Expect 进程来完成一些工作 下面是我的代码 它生成一个 Expect 进程并执行一些工作 脚本的主要进程始终在做一些其他工作 例如它可能等待用户输入 因为我在一个线程中调用这
  • 有没有对数字(千)进行分组的函数?

    小 模块中是否隐藏着一个函数 它为我执行此操作 my var 23654325432 var reverse var var s d 3 K d g var reverse var I like 数字 格式 http search cpan
  • 匹配有限自然数列

    我怎样才能匹配有限自然数 http en wikipedia org wiki Natural number正则表达式系列 所以 要求是 字符串包含数字和空格 作为分隔符 第一个数字是1 每个数字 第一个数字除外 等于前一个数字 1 应该是
  • Perl LWP::简单 HTTPS 错误

    我正在尝试获取网站的内容并打印 该代码按照我希望的方式在常规 HTTP 网站上运行 但它不适用于 HTTPS 我已经查找了此问题的修复程序 但它们在我的程序中不起作用 这是我目前拥有的代码 usr bin perl use strict u
  • Perl 脚本(或任何东西)来合计 CSV 列

    我写了 在其他人的很多帮助下 awk command https stackoverflow com questions 4159224 excel and awk disagree about csv totals 4159404 415
  • 使用 Perl 循环 JSON [重复]

    这个问题在这里已经有答案了 我是 Perl 的新手 想要循环这个 JSON 数据并将其打印到屏幕上 我怎样才能做到这一点 arr Year 2012 Quarter Q3 DataType Other 3 Environment STEVE
  • Perl 中的布尔函数应该返回什么值?

    简短的问题 在 Perl 代码库中一致表示真假的最佳方法是什么 1 0 1 Perl 原生布尔运算符的特殊空字符串 return undef 即空列表 问题背景 我们都知道 Perl 在布尔值方面非常灵活 就像大多数事情一样 例如 Perl
  • 如何使用 Net::SSH::Perl 和公钥?

    我正在尝试使用Net SSH Perl使用公钥与此代码进行连接 my ssh Net SSH Perl gt new host debug gt 1 die 我将密钥放在 root ssh id rsa 和 root ssh identit
  • Path::Class::File 或 ::Dir & Moose 初始化和强制

    目前有 package Local use warnings use Moose use Method Signatures Simple use Path Class File use Path Class Dir method buil
  • Perl 中可以使用哪种语法糖来减少左/右值运算符与 if 语句的代码?

    那里有很多语句 因为 Perl 是一种非常甜蜜的语言 但任何语言中最常用的语句都是 if 语句和设置值的组合 我想我已经找到了很多 但仍然存在一些空白 最终 目标是不必多次编写变量名 这是我到目前为止所拥有的 r s r s unless
  • 如何确保我的代码永远不会直接退出?

    eval require file subsequent code goes here If file包含一个exit语句 后面的代码就没有机会运行 如何解决以便后续代码始终有机会运行eval已经完成了 中止是不可能的exit call f
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • 在perl中调用基本构造函数

    从 Perl 中的类构造函数调用基本构造函数的正确方法是什么 我见过这样的语法 my class shift my a shift my b shift my self class gt SUPER new a b return self
  • Perl 的 caller() 函数返回错误的行号

    我在 Perl 5 10 1 上运行了以下脚本 usr bin perl use strict use warnings foreach my x 0 x lt 1 x Line 5 print line Line 6 sub print
  • Perl 三元条件运算符

    我正在尝试在脚本中编写更高效的代码 并且有时会实现三元条件运算符 我不明白为什么在循环中使用三元条件运算符时会得到额外的结果 usr bin perl use strict use warnings my array Serial 123

随机推荐