好吧,所以我更新数据库表的代码有以下各种风格:
$query = "
insert into Comment
(Comment, CommentDate, Rating, UserRid)
values
(:comment, now(), 0, :userrid )" ;
try {
$db_conn = new PDO('mysql:host='.$db_server.';dbname='.$db_name, $db_username, $db_password );
$db_conn->beginTransaction();
$prep = $db_conn->prepare($query);
$prep->bindParam(':comment', $comment, PDO::PARAM_STR, 500);
$prep->bindParam(':userrid', $userrid, PDO::PARAM_INT, 20);
$prep->execute();
$db_conn->commit();
} catch (PDOException $e) {
$db_conn.rollBack();
echo "Error!: " . $e->getMessage() . "<br/>";
die();
}
在上面,评论来自另一个页面的Post。正在通过函数调用正确设置Userrid。一切正常,除了斜杠添加到表格中。
我读过的所有内容都说,只要有人在撇号中输入我应该使用参数化查询,就可以绕过斜杠。如果我没弄错的话,我很确定这就是我在做的事情。我错过了什么吗?谁能让我知道我做得对不对?
提前致谢, 迈克尔
答案 0 :(得分:4)
可能你已magic_quotes_gpc()
开启了,你需要做这样的事情:
if (get_magic_quotes_gpc() == true)
{
$comment = stripslashes($comment);
$userrid = stripslashes($userrid);
}
如果您使用的是PHP 5.3+,则可以通过在文件顶部放置以下代码行来删除所有魔术引用变量:
if (get_magic_quotes_gpc() === 1)
{
$_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
$_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
$_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
$_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}
如果您运行的是较低版本的PHP,则应take a look at this page。
答案 1 :(得分:1)
它会阻止您不得不添加,但magic_quotes_gpc
之类的内容会将它们放入其中,无论是否需要它们。