Hi Eugene,

Yes, this worked great.  I just find it hard to believe that it's all
necessary.

Without using sqlite_escape_string, single quotes cause "SQL Logic or
missing database" errors.  So I'm forced to use that function on variables
set via a form.

But then to avoid the "backslash in the data" problem, I need to use
stripslashes on the variables I'm about to write to the database.

But just in case a user has magic_quotes_gpc set off, I need to test that
function and then decide whether to use stripslashes() or not.

Problem solved, but the solution is kind of, well, "icky".   I love the idea
of a RDBMS that doesn't require a daemon.  And I love PHP.  They're both so
convenient.  But the difficulty of programming with the two taken together
is more than the sum of the "difficultness" of the two individually.  :(

Thanks!
Pete


On Thu 17 Mar 05,  1:58 PM, Eugene Wee <[EMAIL PROTECTED]> said:
> Hi,
> 
> I think the reason is that sqlite_escape_string() doubles single quotes 
> to escape them.
> However, you have magic_quotes_gpc set to 1 in php.ini
> As such, incoming variables are escaped using backslashes.
> 
> A solution is to use stripslashes() on the incoming variables if 
> get_magic_quotes_gpc() returns 1, since you cant change magic_quotes_gpc 
> at runtime.
> Alternatively, you can alter php.ini, but that's usually not practical.
> 
> Eugene Wee
> 
> Peter Jay Salzman wrote:
> >I've nearly completed converting Wheatblog to sqlite.  It's been quite a
> >learning experience!  I've come across a problem I haven't been able to
> >figure out, though.
> >
> >Whenever I made a blog post that had a forward quote character (') in 
> >either
> >the title or the body of the post, I'd get an error.
> >
> >After a little Googling, I changed my query to:
> >
> >
> >      $query = "INSERT INTO $database_table
> >         (id, day, month, date, year, category, title, body, showpref)
> >         VALUES (null,
> >         '" . sqlite_escape_string($_POST['the_day'])      . "',
> >         '" . sqlite_escape_string($_POST['the_month'])    . "',
> >         '" . sqlite_escape_string($_POST['the_date'])     . "',
> >         '" . sqlite_escape_string($_POST['the_year'])     . "',
> >         '" . sqlite_escape_string($_POST['the_category']) . "',
> >         '" . sqlite_escape_string($_POST['the_title'])    . "',
> >         '" . sqlite_escape_string($_POST['the_body'])     . "',
> >         '" . sqlite_escape_string($_POST['the_showpref']) . "')";
> >   
> >      DB_query($query, $db);
> >
> >and the definition of DB_query is:
> >
> >
> >   function DB_query($cmd, $db)
> >   {
> >      $retval = sqlite_query($db, "$cmd")
> >         or die('Query Error: ' . 
> >         sqlite_error_string(sqlite_last_error($db)));
> >
> >      return $retval;
> >   }
> >
> >This works in the sense that forward quotes no longer generate an error.
> >However, whenever I print out a blog post, the forward quotes are all
> >escaped.   So if I post:
> >
> >   This contains a ' character.
> >
> >The post, when printed looks like:
> >
> >   This contains a \' character.
> >
> >What's the proper way to ensure that ' characters are properly quoted but
> >don't show up in the output?
> >
> >Thanks!
> >Pete
> >
> 

-- 
Save Star Trek Enterprise from extinction: http://www.saveenterprise.com

GPG Fingerprint: B9F1 6CF3 47C4 7CD8 D33E  70A9 A3B9 1945 67EA 951D

Reply via email to