MySQL表中的斜杠,但使用PDO和参数化查询。这是怎么回事?

时间:2010-01-24 21:12:37

标签: php mysql pdo

好吧,所以我更新数据库表的代码有以下各种风格:

$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。一切正常,除了斜杠添加到表格中。

我读过的所有内容都说,只要有人在撇号中输入我应该使用参数化查询,就可以绕过斜杠。如果我没弄错的话,我很确定这就是我在做的事情。我错过了什么吗?谁能让我知道我做得对不对?

提前致谢, 迈克尔

2 个答案:

答案 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之类的内容会将它们放入其中,无论是否需要它们。