0

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 関数を書くことができないようです。誰かが提案できますか?私のコードはほとんど手続き型です。

4

2 に答える 2

2

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)

于 2013-04-24T19:22:53.313 に答える
0

PDO はすでにクラスなので、その周りに「ラッパー」を書くのは少しやり過ぎです。このように使用してください:

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

あなたの例は、注射に対して脆弱です。

于 2013-04-24T19:12:13.857 に答える