postgresql缺乏对parameterizd查询的支持

Joe*_*ing 2 php postgresql pdo

我没有通过浏览谷歌找到.所以我决定在这里问.是否使用php pdo支持参数化查询?

如果不.我怎样才能达到同样的安全性?

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

在对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
     ));
Run Code Online (Sandbox Code Playgroud)

不使用bindParam

这不会为我插入.

我的代码看起来像这样:

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

$project->saveProject();
Run Code Online (Sandbox Code Playgroud)

在项目模型中:

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

}

我的db类中的查询方法将查询放在私有$ _query字段中,将aray参数放在私有$ _parameters字段中.然后我调用save方法,该方法准备语句,将$ this - > _ query作为参数提供给PDO :: prepare(),然后调用PDO :: execute将$ this - > _ parameters作为参数.这无法插入

fon*_*ini 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'];
Run Code Online (Sandbox Code Playgroud)