I'm not familiar with DBD::ODBC, but using placeholders would
fix that (all quoting issues) problem, and can only help
performance - no good reason not to use placeholders, assuming
DBD::ODBC supports them.  Read about them by doing

  perldoc DBI

and search(using the forward slash "/") for "Placeholder".

That would make your code look something like this:

  $sql = qq{
     UPDATE asc_contacts
     SET $subscriberhash{$contactvar} = ?
     WHERE asc_contacts.contact_id = ?
  };
  my $sth = $dbh->prepare($sql)
     or error_handler ("Prepare failed - blah blah.  Error was $DBI::errstr");
  my $rows_affected = $sth->execute(
     $tree->{contact}->{$contactvar},
     $tree->{contact}->{contact_id}
  ) or error_handler ("Execute failed - blah blah: error was $DBI::errstr");

And read about DBD::ODBC by doing

  perldoc DBD::ODBC

HTH.
-- 
Hardy Merrill
Red Hat, Inc.

Bernard Golden [EMAIL PROTECTED] wrote:
> I am attempting to update a SQLServer db and getting an error when the value
> contains a quote (apostrophe) as can be seen from the following error
> message.
> 
> 
> 
>  Error is Update contact
> information failed, column is asc_contacts.title, value is vp's -1
> ([Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax
> near 's'. (SQL-42000) [Microsoft][ODBC SQL Server Driver][SQL
> Server]Unclosed quotation mark before the character string ''.
> (SQL-42000)(DBD: Execute immediate failed err=-1)), occurred at
> Subscriber module line 891
> 
> Here is the code for the update:
> 
>  my $rows = $dbh->do ("UPDATE asc_contacts set $subscriberhash{$contactvar}
> = '$tree->{contact}->{$contactvar}'
>   where asc_contacts.contact_id = '$tree->{contact}->{contact_id}'")
>           or error_handler ("Update contact information failed, column is
> $subscriberhash{$contactvar}, value is $tree->{contact}->{$contactvar}
> $DBI::err ($DBI::errstr)", __LINE__);
> 
> 
> In reading Paul DuBois's MySQL book he notes the quote() method as a way
> around the problem; however, I am not sure if that mechanism will work with
> SQLServer.
> 
> If it is appropriate, I would change the code to:
> 
> my $varvalue = $dbh->quote($tree->{contact}->{$contactvar});
> my $rows = $dbh->do ("UPDATE asc_contacts set $subscriberhash{$contactvar} =
> $varvalue
>   where asc_contacts.contact_id = '$tree->{contact}->{contact_id}'")
>           or error_handler ("Update contact information failed, column is
> $subscriberhash{$contactvar}, value is $tree->{contact}->{$contactvar}
> $DBI::err ($DBI::errstr)", __LINE__);
> 
> Can anyone give me some advice as to whether this will work?
> 
> Many thanks.
> 
> Bernard Golden

Reply via email to