为了防止SQL注入,为查询准备动态MySQL JSON Select 器的最佳/适当方式是什么?例如,假设我想执行以下查询:
SELECT `key` ->> "$.key.path" AS `setting_value`
FROM `settings`
LIMIT 1
但我想使关键路径成为动态路径,例如:
$sql = <<<SQL
SELECT `key` ->> "{$path}" AS `setting_value`
FROM `settings`
LIMIT 1
SQL;
有了条件值,我可以使用PDO为准备好的语句构建SQL,例如:
$sql = <<<SQL
SELECT *
FROM `settings`
WHERE `other_field` = :field_val
LIMIT 1
SQL;
$statement = $this->handle()->prepare($sql);
$statement->execute([':field_val' => 'some val']);
$records = $statement->fetchAll(PDO::FETCH_OBJ);
将类似以下内容添加到我的数据库适配器(甚至添加到我的助手函数)似乎相当不雅致,并且容易出现错误/问题:
public function cleanJsonSelector(string $selector) : string {
return preg_replace('/[^-\$a-zA-Z0-9_\[\].*\s]/', '', $selector);
}
idea /帮助?