一尘不染

PDO报价方式

mysql

您在何时何地在PDO中使用quote方法?考虑到以下事实,我问这个问题:在PDO中,所有引用都是由PDO对象完成的,因此,不应对用户输入进行转义/引用等操作。这让人想知道为什么担心如果不使用quote方法反正在准备好的陈述中?


阅读 221

收藏
2020-05-17

共1个答案

一尘不染

虽然这可能不是唯一的用例,但它是我唯一需要的quote用例。您只能使用传递值PDO_Stmt::execute,例如,该查询将不起作用:

SELECT * FROM tbl WHERE :field = :value

quote 进入以便您可以执行以下操作:

// Example: filter by a specific column
$columns = array("name", "location");
$column = isset($columns[$_GET["col"]]) ? $columns[$_GET["col"]] : $defaultCol;

$stmt = $pdo->prepare("SELECT * FROM tbl WHERE " . $pdo->quote($column) . " = :value");
$stmt->execute(array(":value" => $value));

$stmt = $pdo->prepare("SELECT * FROM tbl ORDER BY " . $pdo->quote($column) . " ASC");

并且仍然希望$column在查询中安全地对其进行过滤。

2020-05-17