PDO SQLITE Escape одиночная кавычка - PullRequest
1 голос
/ 15 января 2012

Использование PDO для CRUD с SQLITE3.Когда я вставляю строку «не», строка попадает в таблицу как «не сделал».

Итак, позже, когда я читаю строку обратно, для вывода в 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 Ответ

2 голосов
/ 15 января 2012

PDO работает так, как должно, вы должны проверить, как вы выполняете вставку (сборку запросов) и источник данных (имеется в виду то, что приходит от $_POST / $_GET).

И особенно магические кавычки gpc .Если вы не знаете, что это, проверьте это.Это очень частая проблема.Прежде чем начать использовать stripslashes / addslashes и т. П.

Вам также следует использовать подготовленный оператор , он не только приятнее, но и намного менее трудоемок и безопаснее.

$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')
));

Вы также можете распечатать данные, которые вы даете «execute», чтобы убедиться, что это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...