【问题标题】:PDO: stripslashes when getting resultsPDO:获取结果时使用斜杠
【发布时间】:2012-08-26 16:00:53
【问题描述】:

我正在使用 PDO 准备好的语句,因此它会在需要时添加斜杠,然后再插入数据库。

我想知道获得结果并将其显示在网站上而不显示斜线的正确方法。

是否像使用echo stripslashes($result->message); 一样简单?

我的查询如下所示:

$database->query('INSERT INTO table_name (field1, field2, field3) VALUES (?, ?, ?)', array($value1, $value2, $value3));

这是我的query 方法:

public function query($query, $bind=null)
{
    global $pdo;

    # Prepare Statment
    $this->statement = $this->pdo->prepare($query);

    # Execute Query
    $this->statement->execute($bind);
}

编辑:get_magic_quotes_gpc 确实已打开,即使 WHM (cPanel) 表示已关闭

【问题讨论】:

  • 你真的试过了吗?
  • @andrewsi 是的,它有效。我想知道这是否是“正常”的做法。
  • 不要使用global $pdo,而是将其注入查询:public function query(PDO $pdo, $query, $bind=null)

标签: php pdo stripslashes


【解决方案1】:

准备好的语句不会在您的查询数据中添加斜杠。他们以占位符的形式将参数注入查询中,这样占位符不被视为查询的一部分,而只是数据的一部分。

因此,没有添加斜线,也不需要stripslashes()

如果为您添加了斜杠,请确保为您的 PDO 实例禁用准备好的语句模拟:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

【讨论】:

  • 使用 PDO 的优势之一难道不是因为它具有使查询更安全的特性吗?从我读到的关于 PDO 的内容来看,我不需要清理查询。我将使用查询的样子编辑我的 OP。
  • @Draven:确实,您不需要清理查询,但不是因为它会为您清理。因为查询是准备好的。举个例子:SELECT * FROM table WHERE id=? ?是一个占位符,该查询被编译(在实际数据被注入查询之前),然后数据被注入,因为查询已经被编译,什么数据进入占位符并不重要,它不会影响查询。
  • 我就是这么想的。在今天运行更多测试之后,它似乎只在$_POST 数据中添加了斜线。那正确吗?如果我按照您的建议进行操作,我认为我的查询仍然是安全的?
  • @Draven:不,其他东西会为你添加这些斜线。因为有人添加了斜线,并且由于准备好的语句,他们没有转义任何东西,所以您会在数据中看到这些斜线。找出谁添加了这些斜线,然后杀死它。然后,你就会开悟,小蚱蜢。
  • 该死,很抱歉给我带来了这么多麻烦,谢谢你帮助我。我使用 WHM (cPanel) 编辑 php.ini,get_magic_quotes_gpc 的设置说它已关闭,但我还是决定保存它,以防万一,果然,它现在已关闭。
【解决方案2】:

get_magic_quotes_gpc 确实已打开,即使 WHM (cPanel) 表示已关闭

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多