Я просто переключился с MySQL на PDO, и я использую подготовленные заявления.
Раньше у меня была функция для MySQL, и на каждой странице я делал что-то вроде
$Query = "UPDATE users SET f_name={$POST["first_name"]}, l_name={$_POST["last_name"]} "; $SQL_obj->runquery($query, "update");
Теперь с PDO и подготовленными операторами имеет смысл создавать функцию, а также просто делать (), 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; } }
-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']));
Например, вы уязвимы для инъекций.