Вставьте много записей, используя одиночные аргументы и используя bindParam

У меня есть метод для вставки некоторых данных в базу данных, например:

public function register($username, $email, $hashedPassword, $activationCode)
{
try {
$conn = Database::getConnection();
// Connect and create the PDO object
$conn->exec('SET CHARACTER SET utf8');      // Sets encoding UTF-8
// Define and prepare an INSERT statement
$sql = 'INSERT INTO users (username, email, pass, reset_token, dateAdded )
VALUES (:username, :pass, :email, :token, now())';
$sqlprep = $conn->prepare($sql);

// Adds value with bindParam
$sqlprep->bindParam(':username', $username, PDO::PARAM_STR);
$sqlprep->bindParam(':email', $email, PDO::PARAM_STR);
$sqlprep->bindParam(':pass', $hashedPassword);
$sqlprep->bindParam(':token', $activationCode);

// If the query is successfully executed, output the value of the last insert id
if ($sqlprep->execute()) {
//echo 'Succesfully added the row with id='. $conn->lastInsertId();
$this->result = true;
}
$conn = null;        // Disconnect

} catch (PDOException $e) {
include('../views/error.php');
include('../views/admin/includes/footer.php');
exit();
}
}

Проблема в том, что я думаю, что это плохой метод, если у меня так много аргументов, чтобы моя функция могла войти в базу данных. Так что это хороший способ, чтобы я мог ввести много полей, просто используя 1 параметр, но все еще используя bindParam? Поскольку я вижу много примеров только с использованием prepare без bindParam. Я думаю, что могу использовать массив, но я не знаю правильный способ сделать это. Поэтому мне нужна помощь, как я могу это сделать.

0

Решение

так как вы хотите сохранить свой bindparam, я предлагаю вам использовать следующие данные:

$ input = array (‘username’ => $ username, ‘activHash’ => $ активацииHash);

и в вашем bindParam добавьте такой код:

public function register($input){
//code

$sqlprep->bindParam(':username', $input['username'], PDO::PARAM_STR);

//other
}

надеюсь, что это решит вашу проблему

0

Другие решения

https://stackoverflow.com/a/10060755/1747411
Проверьте второй пример, вы должны повторить значения с привязками
например
ЗНАЧЕНИЯ (: username1,: pass1,: email1,: token1, now ()), (: username2,: pass2,: email2,: token2, now ())
и bindParam с петлей

0

Вы можете вставить параметры в виде массива в $sqlprep->execute($param_array)
Или просто передавая каждый параметр в массив внутри execute, вот так: $sqlprep->execute(array($param1, $param2))

Обновить:

Передайте значения в $ input в виде массива:

$input = array('username' => $username, 'activationHash' => $activationHash); //and so on

Теперь на стороне модели,
Вы можете связать эти значения с параметрами, используя цикл foreach, например:

foreach ($values as $key => $value) {
$sqlprep->bindParam(':' . $key, $value , PDO::PARAM_STR);
}
0
По вопросам рекламы [email protected]