http://www.perlmonks.org?node_id=990217


in reply to DBD::CSV - SQL Syntax - "AND" clause is not working properly

Replace:

my $query = "SELECT VERSION from test.csv WHERE OS="Fedora" AND RELEASE="Stentz"

with:

my $query = "SELECT VERSION from test.csv WHERE OS='Fedora' AND RELEASE='Stentz'";

You can't be posting the code you're actually running. You were missing a semicolon at the end of the line, also note how I quote the values. You'd have the same problem with Oracle, contrary to your claim.

Update: Basic working example:

#!/usr/bin/perl use strict; use warnings; use DBI; my $dbh = DBI->connect ("dbi:CSV:") or die "Cannot connect: $DBI::errs +tr"; $dbh->{csv_tables}->{testtable} = { 'file' => 'test.csv', }; my $query = "SELECT VERSION from test.csv WHERE OS='Fedora' AND RELEAS +E='Stentz'"; my $sth = $dbh->prepare($query); $sth->execute; $sth->dump_results(); $dbh->disconnect();

Replies are listed 'Best First'.
Re^2: DBD::CSV - SQL Syntax - "AND" clause is not working properly
by slayedbylucifer (Scribe) on Aug 28, 2012 at 11:26 UTC

    The missing ";" was a typo. My actual query looks like below:

    my $query = "SELECT COLUMN3 FROM $table WHERE COLUMN1=\'$var1\' AND CO +LUMN2=\'$var2\'";

    I already tried the "Single quotes" as above and it fails as well. I had to escape the single quotes else it won't interpret the Value that is stored in the variables.

    Thanks for your time.

      When posting please provide an example which you are actually running, not doing this potentially wastes peoples time, posting unrelated code and a made up problem. I've provided a working example based on your csv file and the query you ran. Stop using variables like this, read and understand 'Placeholders and bind values' from the DBI documentation and never ever forget the ballad of Little Bobby Tables. SQL_injection.

        I understand your concern. But i cannot post the actual code as it has company sensitive information and will take me a day to edit that info from the code. so I always duplicate it with the test code and example and then only post it on the forum.

        thanks for your time.