2012-01-14 7 views
1

PDITEを使用してSQLite3でCRUDを使用する。文字列 'did not'を挿入すると、文字列は 'didn \' t 'としてテーブルに入ります。PDO SQLiteシングルクォートバックスラッシュをエスケープ

それで、後で文字列を読んで、HTMLに出力すると、私のウェブページには表示されません。

したがって、PDOがバックスラッシュでINSERTの一重引用符をエスケープしている場合、どのように表示するためにエスケープするバックスラッシュを取り除きますか?

それは意味がありますか?

EDIT - コードを含む。 $ eventBodyは問題の文字列です。

try { 
       $db = new PDO('sqlite:../posts.sqlite'); 
       $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       } 
      catch(PDOException $e) 
       { 
        echo $e->getMessage(); 
        die; 
       } 
        //using the sqlite functions to do date/time stuff 
     $query = 'INSERT INTO posts (eDay, eMonth, eYear, eTitle, eBody,author, eURL, eTime) 
        VALUES(strftime(\'%d\',\'now\') , strftime(\'%m\',\'now\') , strftime(\'%Y\',\'now\') ,"'. $eventTitle .'","'.$eventBody.'","' . $eventAuthor. '","' . $eventURL . '",time(\'now\',\'localtime\'));' ; 

       try 
       { 
       $result=$db->query($query); 
       if(!($result)) 
       { 
        echo "INSERT FAILED.<br>"; 
        echo "QUERY STRING: ".$query ." <br>"; 
        die; 

       } 
        echo "Successfully Added Record"; 
        $eventTitle = ''; 
        $eventBody=''; 
        $eventURL=''; 
        $eventAuthor=''; 
      //  urlRedirect("Referback.php"); 
       } 
       catch (PDOException $ex) 
       { 
        echo $ex->getMessage(); 
        die; 
       } 
       catch (Exception $exc) 
       { 
        echo $exc->getMessage(); 
        die; 
       } 
     } 
+0

挿入コードを教えていただけますか? – greut

+0

PHPとSQLを混在させているので、クエリを構築する方法はうまくいかない。 – greut

答えて

2

PDOはそれは、あなたがあなたのインサート(クエリを作成)し、データソース($_POST/$_GETから来ているものを意味する)を行う方法を確認する必要があります必要がありますように動作します。

そして特にmagic quotes gpc。それが何であるか分からなければ、それをチェックしてください。非常に再発する問題です。 stripslashes/addslashesなどを使用する前に

また、prepared statementを使用する必要があります。これは、より良いだけでなく、作業量も少なく、安全です。

$stmt = $db->prepare('INSERT INTO posts '. 
    '(eDay, eMonth, eYear, eTitle, eBody, author, eURL, eTime) '. 
    'VALUES (?, ?, ?, ?, ?, ?, ?, ?);'); 
$result = $stmt->execute(array(
    date('d'), 
    date('m'), 
    date('Y'), 
    $eventTitle, 
    $eventBody, 
    $eventAuthor, 
    $eventURL, 
    time('now', 'localtime') 
)); 

また、実行するデータを印刷して、確実に実行することもできます。

+0

感謝します。私は準備文についての投稿を見てきました。私は書き直しを避けようとしていたと思います。私は頻繁に(仕事のために)MS SQLのストアプロシージャを使用していますが、このアプローチはやや似ています。私はそれを撃つだろう。時間をとっていただきありがとうございます。 – paparush

+0

Gruet、あなたのコードはすぐに使えました。しかし、文字列はまだテーブルには格納されません。 – paparush

+0

'magic_quote_gpc'をチェックし、' execute'に渡した配列をvar_dumpでダンプしてください。 – greut

関連する問題