使用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;
}
}
答案 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')
));
您还可以打印您执行的数据以确保,这是您想要的。