Re: Select with dbi perl??? Help please!

2002-01-07 Thread Gerald Clark



Sascha Kettner wrote:

> Hi!
> 
> I have the following script to be executed via post from a web-form; the
> var. Pin, msisd and knd are given by the form but however, the script is
> not working. I always get no results as if there are no matches, but
> this isnt right! This is regardless which entries i submit with the
> form!
> Any ideas to fix the problem?
> 
> Thanks a lot in advance
> Regards
> 
> Sascha Kettner
> 
> #!/usr/bin/perl
>   
>   use DBI();
> #
> # Get form Data #
> #
> 
>   &parse_form;
> 
> # Script Variables #
> 
> $input{knd} = "";
> $input{pin} = "";
> $input{msisdn} = "";
> 
> 
> # What to do on submit #
> 
> 
> &dojob;
> 
> ##
> # Lets have a look at the db #
> ##
> 
> sub dojob {
> 
> # Now retrieve data from the table.
> my $dbh = DBI->connect("DBI:mysql:database=prepaid;host=localhost",
>  "root", "sascha28",
>  {'RaiseError' => 1});
> my $sth = $dbh->prepare("SELECT * FROM pins WHERE pin LIKE '$input{pin}'
> OR msisdn LIKE '$input{msisdn}' OR knd LIKE '$input{knd}'");
> print < Content-type: text/html

'$input(pin)' is  a literal string.
The single quote will prevent it from being evaluated.
Use the $dhb->quote() function to quote and assign your variable to 
another, and
then use that variable in your query without the single quotes.

my $pin=$dbh->quote($input{pin};
my $sth = $dbh->prepare("SELECT * FROM pins WHERE pin LIKE $pin  ...


> 
> 
> 
> 
> 
> 
> MAKEPINS
> 
> 
> 
> Suche Ausgeführt
> 
> 
> 
> EOF
> $sth->execute();
> while (my $ref = $sth->fetchrow_hashref()) {
> print "Eintrag gefunden: pin = $ref->{'pin'}, msisdn =
> $ref->{'msisdn'}\n, knd = $ref->{'knd'}\n\n";
>   }
> $sth->finish();
> # Disconnect from the database.
> $dbh->disconnect();
> exit;
> }
> ##
> # Get form data function #
> ##
> 
> sub parse_form {
> 
>read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
>if (length($buffer) < 5) {
>  $buffer = $ENV{QUERY_STRING};
> }
>@pairs = split(/&/, $buffer);
>foreach $pair (@pairs) {
>   ($name, $value) = split(/=/, $pair);
> 
>   $value =~ tr/+/ /;
>   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
> 
>   $input{$name} = $value;
>}
> }
> 
> ###
> # The end #
> ###
> 
> 
> -
> Before posting, please check:
>http://www.mysql.com/manual.php   (the manual)
>http://lists.mysql.com/   (the list archive)
> 
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail 
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> 
> 
> 


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail 
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




RE: Select with dbi perl??? Help please!

2002-01-06 Thread Matthew Smith

I would suggest turning logging on ('log' entry in my.cnf under mysqld)
do a search and look to see what the actual SELECT parsed by the mysqld
server was.  My hunch is that it is only seeing '%' and not '123456789123%'
as expected.

OK, so I now look at your code.  It will be looking for '$input{pin}%'
and NOT veriable substituted since it has SINGLE quotes (perl treats things
in single quotes as literals).

A better way is:

 my $sql  = qq{
  SELECT *
  FROM pins
  WHERE
pin LIKE ? OR
msisdn LIKE ? OR
knd LIKE ?
 };
 my $sql=$dbh->prepare($sql);
 $sql->execute( "%".$input{pin}."%", "%".$input{msisdn}."%",
"%".$input{knd}."%");

If you want exect matches, use:
  $sql->execute( $input{pin}, $input{msisdn}, $input{knd});

This makes quoting problems go away.  (Imagine if a single or double quote
was
in one of the $input variables - what would the SELECT look like... OK,
so
you could get round the problem with $input{pin}=$dbh->quote($input{pin})
but
much easier to bind variables as above.

Using '?' makes your code much easier to read.

[Note, the '%' in a LIKE expression matches any zero or more characters.]

Regards

M

-----Original Message-
From: Sascha Kettner [mailto:[EMAIL PROTECTED]]
Sent: 07 January 2002 07:38
To: [EMAIL PROTECTED]
Subject: Select with dbi perl??? Help please!


HI!

Thanks for your Help! I´ve tried this, but when inserting the % now all
my selections seem to be valid or successful, even if there is no match!
What is wrong? My table for testing has the following entries:

Pin: 123456789123   msisdn:+491231234567knd:test
PIN: 123456789012   msisdn:0knd:test

So when i insert into my form the search for test, f.e. i get both
entries as a result, but even when i insert the search for 123456789123
i get both results as before but when you look at my table, you see,
that only one entry should be displayed! So any other ideas?

Regards
Sascha Kettner

> -Ursprüngliche Nachricht-----
> Von: Jesse Shy [mailto:[EMAIL PROTECTED]]
> Gesendet: Sonntag, 6. Januar 2002 23:54
> An: [EMAIL PROTECTED]
> Betreff: RE: Select with dbi perl??? Help please!
>
>
> I have found that unless I put a % sign either before, after
> or both, to denote the match part in question, that I don't
> get anything. Try  this:  LIKE '$input{pin}%'
>
> that should do it. If not, copy the SQL statement from your
> script to the mysql client to test. I wouldn't retypr it, I
> would copy it so you try exactly what is in your script.
>
> Good luck!
>
> -Original Message-
> From: Sascha Kettner [mailto:[EMAIL PROTECTED]]
> Sent: Sunday, January 06, 2002 4:14 PM
> To: [EMAIL PROTECTED]
> Subject: Select with dbi perl??? Help please!
>
>
> Hi!
>
> I have the following script to be executed via post from a
> web-form; the var. Pin, msisd and knd are given by the form
> but however, the script is not working. I always get no
> results as if there are no matches, but this isnt right! This
> is regardless which entries i submit with the form! Any ideas
> to fix the problem?
>
> Thanks a lot in advance
> Regards
>
> Sascha Kettner
>
> #!/usr/bin/perl
>
>   use DBI();
> #
> # Get form Data #
> #
>
>   &parse_form;
> 
> # Script Variables #
> 
> $input{knd} = "";
> $input{pin} = "";
> $input{msisdn} = "";
>
> 
> # What to do on submit #
> 
>
> &dojob;
>
> ##
> # Lets have a look at the db #
> ##
>
> sub dojob {
>
> # Now retrieve data from the table.
> my $dbh = DBI->connect("DBI:mysql:database=prepaid;host=localhost",
>  "root", "sascha28",
>  {'RaiseError' => 1});
> my $sth = $dbh->prepare("SELECT * FROM pins WHERE pin LIKE
> '$input{pin}' OR msisdn LIKE '$input{msisdn}' OR knd LIKE
> '$input{knd}'");
> print < Content-type: text/html
>
>
> 
> 
> 
> MAKEPINS
> 
> 
> 
> Suche Ausgeführt
> 
> 
>
> EOF
> $sth->execute();
> while (my $ref = $sth->fetchrow_hashref()) {
> print "Eintrag gefunden: pin = $ref->{'pin'}, msisdn =
> $ref->{'msisdn'}\n, knd = $ref->{'knd'}\n\n";
>   }
> $sth->finish();
> # Disconnect from the database.
> $dbh->disconnect();
> exit;
> }
> ##
> # Get form data fun

Select with dbi perl??? Help please!

2002-01-06 Thread Sascha Kettner

HI!

Thanks for your Help! I´ve tried this, but when inserting the % now all
my selections seem to be valid or successful, even if there is no match!
What is wrong? My table for testing has the following entries:

Pin: 123456789123   msisdn:+491231234567knd:test
PIN: 123456789012   msisdn:0knd:test

So when i insert into my form the search for test, f.e. i get both
entries as a result, but even when i insert the search for 123456789123
i get both results as before but when you look at my table, you see,
that only one entry should be displayed! So any other ideas?

Regards
Sascha Kettner

> -Ursprüngliche Nachricht-
> Von: Jesse Shy [mailto:[EMAIL PROTECTED]]
> Gesendet: Sonntag, 6. Januar 2002 23:54
> An: [EMAIL PROTECTED]
> Betreff: RE: Select with dbi perl??? Help please!
> 
> 
> I have found that unless I put a % sign either before, after
> or both, to denote the match part in question, that I don't 
> get anything. Try  this:  LIKE '$input{pin}%'
> 
> that should do it. If not, copy the SQL statement from your
> script to the mysql client to test. I wouldn't retypr it, I 
> would copy it so you try exactly what is in your script.
> 
> Good luck!
> 
> -Original Message-
> From: Sascha Kettner [mailto:[EMAIL PROTECTED]]
> Sent: Sunday, January 06, 2002 4:14 PM
> To: [EMAIL PROTECTED]
> Subject: Select with dbi perl??? Help please!
> 
> 
> Hi!
> 
> I have the following script to be executed via post from a
> web-form; the var. Pin, msisd and knd are given by the form 
> but however, the script is not working. I always get no 
> results as if there are no matches, but this isnt right! This 
> is regardless which entries i submit with the form! Any ideas 
> to fix the problem?
> 
> Thanks a lot in advance
> Regards
> 
> Sascha Kettner
> 
> #!/usr/bin/perl
> 
>   use DBI();
> #
> # Get form Data #
> #
> 
>   &parse_form;
> 
> # Script Variables #
> 
> $input{knd} = "";
> $input{pin} = "";
> $input{msisdn} = "";
> 
> 
> # What to do on submit #
> 
> 
> &dojob;
> 
> ##
> # Lets have a look at the db #
> ##
> 
> sub dojob {
> 
> # Now retrieve data from the table.
> my $dbh = DBI->connect("DBI:mysql:database=prepaid;host=localhost",
>  "root", "sascha28",
>  {'RaiseError' => 1});
> my $sth = $dbh->prepare("SELECT * FROM pins WHERE pin LIKE
> '$input{pin}' OR msisdn LIKE '$input{msisdn}' OR knd LIKE 
> '$input{knd}'");
> print < Content-type: text/html
> 
> 
> 
> 
> 
> MAKEPINS
> 
> 
> 
> Suche Ausgeführt
> 
> 
> 
> EOF
> $sth->execute();
> while (my $ref = $sth->fetchrow_hashref()) {
> print "Eintrag gefunden: pin = $ref->{'pin'}, msisdn =
> $ref->{'msisdn'}\n, knd = $ref->{'knd'}\n\n";
>   }
> $sth->finish();
> # Disconnect from the database.
> $dbh->disconnect();
> exit;
> }
> ##
> # Get form data function #
> ##
> 
> sub parse_form {
> 
>read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
>if (length($buffer) < 5) {
>  $buffer = $ENV{QUERY_STRING};
> }
>@pairs = split(/&/, $buffer);
>foreach $pair (@pairs) {
>   ($name, $value) = split(/=/, $pair);
> 
>   $value =~ tr/+/ /;
>   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
> 
>   $input{$name} = $value;
>}
> }
> 
> ###
> # The end #
> ###
> 
> 
> -
> Before posting, please check:
>http://www.mysql.com/manual.php   (the manual)
>http://lists.mysql.com/   (the list archive)
> 
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail 
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> 


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail 
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Select with dbi perl??? Help please!

2002-01-06 Thread Sascha Kettner

Hi!

I have the following script to be executed via post from a web-form; the
var. Pin, msisd and knd are given by the form but however, the script is
not working. I always get no results as if there are no matches, but
this isnt right! This is regardless which entries i submit with the
form!
Any ideas to fix the problem?

Thanks a lot in advance
Regards

Sascha Kettner

#!/usr/bin/perl
  
use DBI();
#
# Get form Data #
#

  &parse_form;

# Script Variables #

$input{knd} = "";
$input{pin} = "";
$input{msisdn} = "";


# What to do on submit #


&dojob;

##
# Lets have a look at the db #
##

sub dojob {

# Now retrieve data from the table.
my $dbh = DBI->connect("DBI:mysql:database=prepaid;host=localhost",
 "root", "sascha28",
 {'RaiseError' => 1});
my $sth = $dbh->prepare("SELECT * FROM pins WHERE pin LIKE '$input{pin}'
OR msisdn LIKE '$input{msisdn}' OR knd LIKE '$input{knd}'");
print <


MAKEPINS



Suche Ausgeführt



EOF
$sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {
print "Eintrag gefunden: pin = $ref->{'pin'}, msisdn =
$ref->{'msisdn'}\n, knd = $ref->{'knd'}\n\n";
  }
$sth->finish();
# Disconnect from the database.
$dbh->disconnect();
exit;
}
##
# Get form data function #
##

sub parse_form {

   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   if (length($buffer) < 5) {
 $buffer = $ENV{QUERY_STRING};
}
   @pairs = split(/&/, $buffer);
   foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);

  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

  $input{$name} = $value;
   }
}

###
# The end #
###


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail 
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php