1

这是 SQL 查询的示例包装器

public function where ($col, $val)
{
    if (!preg_match('~^[a-z0-9_]+$~i', $col))
        throw new Exception('Invalid parameter $col');

    $this->where.= "WEHERE $col = :$col";
}

这是否有点矫枉过正,因为正则表达式可能正在使用资源。注意我实际上是用它来包装 PDO(注意 :$col 中的冒号)。

4

1 回答 1

1

如果$col可以通过用户输入指定,那么这不是矫枉过正,而是您对 SQL 注入的唯一防御。

如果$col已知安全(例如,您的代码通过switch语句生成其值),那么包含运行时检查可能不值得。但是您应该考虑到“已知安全”状态随着程序在未来的维护中发生变化的可能性。

于 2012-08-03T11:49:22.807 回答