PDO SQLITE Escape单引号反斜杠

时间:2012-01-14 20:42:06

标签: php sqlite pdo

使用PDO与CRITE一起使用SQLITE3。当我插入一个字符串'did not'时,字符串以'didn \'t'的形式进入表中。

所以,稍后当我读回字符串后,输出到HTML,我就不会进入我的网页。

因此,如果PDO使用反斜杠转义INSERT上的单引号,我该如何去除转义的反斜杠以进行演示?

这有意义吗?

编辑 - 包括代码。 $ 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;
                }
        }

1 个答案:

答案 0 :(得分: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')
));

您还可以打印您执行的数据以确保,这是您想要的。