在过程环境中使用PDO的最佳方式


Best way to use PDO in procedural environment

我刚刚从MySQL切换到PDO,我正在使用准备好的语句。

我曾经有MySQL的函数,我在每个页面上都做了类似

的事情
$Query = "UPDATE users SET f_name={$POST["first_name"]}, l_name={$_POST["last_name"]} ";
$SQL_obj->runquery($query, "update");

现在有了PDO和准备好的语句,创建函数是否也有意义,或者只是在每个查询上做prepare(), bindValue()和execute() ?

我似乎不能写出好的PDO函数。有人能建议一下吗?我的代码大部分是过程式的

您可以扩展PDO并添加一个助手方法来完成这两个任务:

class MyPDO extends PDO{
  public function prepareAndExecute($sql){
    // get all arguments passed to this function as an array
    $args = func_get_args();
    // drop first argument ($sql)
    array_shift($args);
    $stm = $this->prepare($sql);
    $stm->execute($args);
    return $stm;
  }
}

:

$results = $connection->prepareAndExecute(
  'UPDATE users SET f_name=?, l_name=?', 
     $POST["first_name"],
     $_POST["last_name"]
);

($connection =一个MyPDO的实例)

PDO已经是一个类了,所以在它周围写一个"包装器"有点过分了。请这样使用:

$Query = "UPDATE users SET f_name=:firstname, l_name=:lastname ";
$sth = $dbh->prepare($Query);
$sth->execute(array(':firstname' => $_POST['firstname'], ':lastname' => $_POST['lastname']));

你的例子很容易被注射。