У меня есть метод для вставки некоторых данных в базу данных, например:
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. Я думаю, что могу использовать массив, но я не знаю правильный способ сделать это. Поэтому мне нужна помощь, как я могу это сделать.
так как вы хотите сохранить свой bindparam, я предлагаю вам использовать следующие данные:
$ input = array (‘username’ => $ username, ‘activHash’ => $ активацииHash);
и в вашем bindParam добавьте такой код:
public function register($input){
//code
$sqlprep->bindParam(':username', $input['username'], PDO::PARAM_STR);
//other
}
надеюсь, что это решит вашу проблему
https://stackoverflow.com/a/10060755/1747411
Проверьте второй пример, вы должны повторить значения с привязками
например
ЗНАЧЕНИЯ (: username1,: pass1,: email1,: token1, now ()), (: username2,: pass2,: email2,: token2, now ())
и bindParam с петлей
Вы можете вставить параметры в виде массива в $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);
}