Postgresql缺乏对参数查询的支持


postgresql lacking support for parameterizd queries

我没能在google上找到。所以我决定在这里问一下。postgre是否支持参数化查询?

如果不是

。我怎样才能达到同样的安全?

注意安全,因此注射证明是绝对必须的。作为旁注,使用另一个数据库不是一个选项。

对Fonini的回应;

参数化查询,如下所示:

     $st = $db->prepare(
         "insert into vendors set
         first_name = :first_name,
         last_name = :last_name"
     );
     $st->execute(array(
         ':first_name' => $vendor->first_name,
         ':last_name' => $vendor->last_name
     ));

不使用bindParam

不适合我。

我的代码是这样的:

$project = new Project();
$project->id = 'sequence string';
$project->projectName = 'A project name';
$project->saveProject();

,在项目模型中:

public function saveProject() {
    $this->_db->query("INSERT INTO projects VALUES (:id,:projectName)", array(':id' => $this->_projectFields['id'], ':projectName' => $this->_projectFields['projectName']))->save();

}

my db类中的查询方法将查询放在私有$_query字段中,并将数组参数放在私有$_parameters字段中。然后调用save方法,该方法准备语句,将$this->_query作为参数传递给PDO::prepare(),然后调用PDO::execute,将$this->_parameters作为参数。插入

失败

是的,参数化查询在PHP PDO中工作得很好。

$db = new PDO('pgsql:host=localhost;dbname=cars', 'user', 'password');
$cars = $db->prepare('SELECT * FROM cars WHERE id = :id');
$cars->bindParam(':id', $id = 20, PDO::PARAM_INT);
$cars->execute();
$result = $cars->fetch();
echo 'Name: ' . $result['name'];

有几种方法可以提交值,而不是用值的文本表示构建SQL语句。

准备好的语句最有可能是你正在考虑的。

您还可以创建函数("存储过程")并将值作为参数提交。

这是一个相关问题的相关答案