【发布时间】:2011-11-04 15:35:29
【问题描述】:
我没有通过浏览谷歌找到答案。所以我决定在这里问。使用 php pdo 的 postgre 是否支持参数化查询?
如果没有。我怎样才能达到同样的安全性?
注意安全,因此注射证明是绝对必须的。使用另一个数据库不是一个选项。
对福尼尼的回应;
这样的参数化查询:
$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();
}
我的 db 类中的查询方法将查询放在私有 $_query 字段中,并将 aray 参数放在私有 $_parameters 字段中。然后我调用 save 方法,它准备语句,将 $this->_query 作为参数提供给 PDO::prepare(),然后调用 PDO::execute,将 $this->_parameters 作为参数。插入失败
【问题讨论】:
-
为什么不呢?我不知道 PDO,但是 PostgreSQL 支持 JDBC 和 ODBC 中的参数化查询。
-
因为如果我使用未参数化的查询,它会插入数据,而使用参数化,它不会。使用完全相同的数据。我用 print r's 和 echos 验证了这一点。
-
显示您的代码。问题出在你自己,而不是 PostgreSQL。
-
你为什么不使用 pg_query_params() ?当您只使用 PostgreSQL 时,PDO 只是开销。只需在 PHP 中使用 PostgreSQL 函数
-
我不知道在 php 中为 postgre 构建的标准函数,但我们总是在项目中使用 PDO。这是标准。项目也往往会变得相当大,与其他平台(如 android 等)进行通信。
标签: php postgresql pdo