Re: Problem with single quote ' character

2000-11-18 Thread Larry Leszczynski

Hi Omri -

   my $authors = $query{'authors'};
[...]
   $q_authors = $dbh-quote($authors);
[...]
   $sth = $dbh-prepare( "UPDATE tbl_sarah SET authors = '$authors',

It fails because you're not using the quoted version of the variables
(e.g. "$q_authors") in your prepare statement.

Using bind variables like Mike described below is still a better way to
go.  Not only easier, but from what I understand (at least with Oracle) it
allows the database to cache a single update statement (the one with the
placeholders) instead of caching a new statement for each update (with
explicit column values).


 The solution is simple, put the bind variables in the '$sth-execute'
 and it will automagically be quoted like so:
 
 $sth = $dbh-prepapre("UPDATE tbl_sarah SET authors = ?, title = ? WHERE
 id = ?");
 $sth-execute($authors, $title, $id);
 
 use one variable per placeholder '?'. no need to use single quotes in the
 SQL statement. for more info read the DBI documentation.
 
 you wouldn't need all those '$q_var = $dbh-quote($var)' lines in the top
 too.



Larry Leszczynski
[EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Problem with single quote ' character

2000-11-15 Thread Victor Michael D. Blancas

  Hi Rodney, thanks very much for your reply. I'm trying it now, but I'm doing
  something wrong. Here's what I have, could you take a look at it?
  
  #parse query string and enter into database if query string exists
  
  my $authors = $query{'authors'};
  my $title = $query{'title'};
  my $year = $query{'year'};
  my $source = $query{'source'};
  my $topic = $query{'topic'};
  my $purpose = $query{'purpose'};
  my $sample = $query{'sample'};
  my $gmc = $query{'gmc'};
  my $process = $query{'process'};
  my $outcome = $query{'outcome'};
  my $rater = $query{'rater'};
  my $results = $query{'results'};
  my $refs = $query{'refs'};
  my $notes = $query{'notes'};
  my $therapy = $query{'therapy'};
  my $analysis = $query{'analysis'};
  my $critique = $query{'critique'};
  my $getcopy = $query{'getcopy'};
  my $id = $query{'id'};
  
  
  #make sure all single quotes are escaped
  
  $q_authors = $dbh-quote($authors);
  $q_title = $dbh-quote($title);
  $q_year = $dbh-quote($year);
  $q_source = $dbh-quote($source);
  $q_topic = $dbh-quote($topic);
  $q_purpose = $dbh-quote($purpose);
  $q_sample = $dbh-quote($sample);
  $q_gmc = $dbh-quote($gmc);
  $q_process = $dbh-quote($process);
  $q_outcome = $dbh-quote($outcome);
  $q_rater = $dbh-quote($rater);
  $q_results = $dbh-quote($results);
  $q_refs = $dbh-quote($refs);
  $q_notes = $dbh-quote($notes);
  $q_therapy = $dbh-quote($therapy);
  $q_analysis = $dbh-quote($analysis);
  $q_critique = $dbh-quote($critique);
  $q_getcopy = $dbh-quote($getcopy);
  
  
  #update entry form into the database
  
  $sth = $dbh-prepare( "UPDATE tbl_sarah SET authors = '$authors', title =
  '$title', year = '$year', source = '$source', topic = '$topic', purpose =
  '$purpose', sample = '$sample', gmc = '$gmc', process = '$process', outcome
  = '$outcome', rater = '$rater', results = '$results', refs = '$refs', notes
  = '$notes', therapy = '$therapy', analysis = '$analysis', critique =
  '$critique', getcopy = '$getcopy' WHERE id = '$id'" );  
  $sth-execute();
  
  --I've put single quotes and also tried no quotes around the variables in
  the SQL statement; neither worked.
  
The solution is simple, put the bind variables in the '$sth-execute'
and it will automagically be quoted like so:

$sth = $dbh-prepapre("UPDATE tbl_sarah SET authors = ?, title = ? WHERE
id = ?");
$sth-execute($authors, $title, $id);

use one variable per placeholder '?'. no need to use single quotes in the
SQL statement. for more info read the DBI documentation.

you wouldn't need all those '$q_var = $dbh-quote($var)' lines in the top
too.

  Thanks again,
  Omri

Mike




Re: Problem with single quote ' character

2000-11-14 Thread Rodney Broom

Hmm, what was the message that you got back when you executed this stement?

Rodney Broom

- Original Message - 
From: "Omri Tintpulver" [EMAIL PROTECTED]
To: "'Rodney Broom'" [EMAIL PROTECTED]
Sent: Tuesday, 14 November, 2000 07:07
Subject: RE: Problem with single quote ' character


 Hi Rodney, thanks very much for your reply. I'm trying it now, but I'm doing
 something wrong. Here's what I have, could you take a look at it?
 
 #parse query string and enter into database if query string exists
 
 my $authors = $query{'authors'};
 my $title = $query{'title'};
 my $year = $query{'year'};
 my $source = $query{'source'};
 my $topic = $query{'topic'};
 my $purpose = $query{'purpose'};
 my $sample = $query{'sample'};
 my $gmc = $query{'gmc'};
 my $process = $query{'process'};
 my $outcome = $query{'outcome'};
 my $rater = $query{'rater'};
 my $results = $query{'results'};
 my $refs = $query{'refs'};
 my $notes = $query{'notes'};
 my $therapy = $query{'therapy'};
 my $analysis = $query{'analysis'};
 my $critique = $query{'critique'};
 my $getcopy = $query{'getcopy'};
 my $id = $query{'id'};
 
 
 #make sure all single quotes are escaped
 
 $q_authors = $dbh-quote($authors);
 $q_title = $dbh-quote($title);
 $q_year = $dbh-quote($year);
 $q_source = $dbh-quote($source);
 $q_topic = $dbh-quote($topic);
 $q_purpose = $dbh-quote($purpose);
 $q_sample = $dbh-quote($sample);
 $q_gmc = $dbh-quote($gmc);
 $q_process = $dbh-quote($process);
 $q_outcome = $dbh-quote($outcome);
 $q_rater = $dbh-quote($rater);
 $q_results = $dbh-quote($results);
 $q_refs = $dbh-quote($refs);
 $q_notes = $dbh-quote($notes);
 $q_therapy = $dbh-quote($therapy);
 $q_analysis = $dbh-quote($analysis);
 $q_critique = $dbh-quote($critique);
 $q_getcopy = $dbh-quote($getcopy);
 
 
 #update entry form into the database
 
 $sth = $dbh-prepare( "UPDATE tbl_sarah SET authors = '$authors', title =
 '$title', year = '$year', source = '$source', topic = '$topic', purpose =
 '$purpose', sample = '$sample', gmc = '$gmc', process = '$process', outcome
 = '$outcome', rater = '$rater', results = '$results', refs = '$refs', notes
 = '$notes', therapy = '$therapy', analysis = '$analysis', critique =
 '$critique', getcopy = '$getcopy' WHERE id = '$id'" );  
 $sth-execute();
 
 --I've put single quotes and also tried no quotes around the variables in
 the SQL statement; neither worked.
 
 Thanks again,
 Omri
 
 
 -Original Message-
 From: Rodney Broom [mailto:[EMAIL PROTECTED]]
 Sent: Monday, November 13, 2000 10:15 PM
 To: [EMAIL PROTECTED]
 Subject: Re: Problem with single quote ' character
 
 
 Hi Omri,
 
 RH This is an FAQ and there is a lot of info on this.  You need to escape
 it
 RH with \.
 RH Just about all languages have a function that does this for you.  Look
 up
 RH the appropriate docs.
 
  Hmm, let's see if I can be a little bit more helpful than Rolf. Although he
 really is right. ;-)
 
 - Here's the SQL side of it:
 Let's say that $firstfield is equal to "Rodney's sooo cool!', and that $id
 is
 equal to 86. That means that when this statement is passed into your DB
 (MySQL),
 that the text of:
  UPDATE tbl_hello SET firstfield = '$firstfield' WHERE id = '$id'
 will come through as:
  UPDATE tbl_hello SET firstfield = 'Rodney's sooo cool!' WHERE id = '86'
 
 See the problem?
 
 - OK, now the Perl side:
 First, I'm assuming that you are using the DBI package. If not, say so. DBI
 provides a neeto routine called quote(), it works like this:
   $q_var = $dbh-quote($var);
 So, doing that to $firstfield would look like this:
   $q_firstfield = $dbh-quote($firstfield);
 $firstfield is not equal to ['Rodney\'s soo cool'], including all three
 single
 quotes. So, if your Perl code looks like this:
   $sql = sprintf(
 qq{UPDATE tbl_hello SET firstfield = %s WHERE id = '$id'},
 $dbh-quote($firstfield)
   );
 
 Then you'll get the SQL to pass to the DB that you are looking for.
 Hollar if you have any other questions.
 
 
 Rodney Broom
 
 
 
 -- 
 -
 Please check "http://www.mysql.com/documentation/manual.php" before
 posting. To request this thread, e-mail [EMAIL PROTECTED]
 
 To unsubscribe, send a message to:
 [EMAIL PROTECTED]
 
 If you have a broken mail client that cannot send a message to
 the above address (Microsoft Outlook), you can use:
 http://lists.mysql.com/php/unsubscribe.php