PDO:SQL中的引号

时间:2011-07-29 12:30:16

标签: php sql pdo

当我尝试使用PDO运行查询时,我看到一些奇怪的东西。以下代码不应返回结果,但确实如此:

$safe_path = $this->_databaseConnection->quote($unsafe_path);
$sql = "SELECT * FROM routes WHERE path=$safe_path LIMIT 1";
$statement_handle = $this->_databaseConnection->query($sql);
var_dump($statement_handle->fetchAll());

我很困惑,因为$safe_path变量周围没有单引号,因为如果我使用的是mysqli扩展名 - 但它正在工作。如果我将$safe_path括在引号中,则不会返回任何结果。这对我来说很奇怪。

3 个答案:

答案 0 :(得分:2)

您已使用示例中的第一行引用$safe_path变量:

$safe_path = $this->_databaseConnection->quote($unsafe_path);

这就是为什么它按原样运作。如果您尝试在:

中自己添加引号
$sql = "SELECT * FROM routes WHERE path='$safe_path' LIMIT 1";

然后你会加倍引号,从而打破SQL查询。

有关详细信息,请参阅manual page for quote()

  

PDO :: quote()在输入字符串周围放置引号(如果需要)和   使用引号转义输入字符串中的特殊字符   适合底层驱动程序的样式。

答案 1 :(得分:2)

PDO quote方法只是在字符串上下文中添加引号。

http://php.net/manual/en/pdo.quote.php

  

PDO :: quote()在输入字符串周围放置引号(如果需要)[...]

答案 2 :(得分:1)

你不是在加引号吗?

$safe_path = $this->_databaseConnection->quote($unsafe_path);