我没有通过浏览谷歌找到答案。所以我决定在这里问。是否使用php pdo支持参数化查询i 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();
}
我的db类中的查询方法将查询放在私有$ _query字段中,将aray参数放在私有$ _parameters字段中。然后我调用save方法,该方法准备语句,将$ this-> _query作为参数提供给PDO :: prepare(),然后调用PDO :: execute给出$ this-> _parameters作为参数。这无法插入
答案 0 :(得分:5)
是的,参数化查询与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'];
答案 1 :(得分:2)
有几种方法可以交换值,而不是使用值的文本表示来构建SQL语句。
Prepared statements很可能是您的想法。
您还可以create functions(“存储过程”)并将值作为参数传递。
以下是相关问题的related answer