当我尝试使用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
括在引号中,则不会返回任何结果。这对我来说很奇怪。
答案 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);