我有一些方法可以将一些数据插入数据库,如下所示:
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 :(得分:0)
您可以将参数作为数组插入$sqlprep->execute($param_array)
或者,只需将每个参数传递到执行内部的数组中,如下所示:$sqlprep->execute(array($param1, $param2))
更新
将值作为数组传递给$ input:
$input = array('username' => $username, 'activationHash' => $activationHash); //and so on
现在在模型方面, 您可以使用foreach循环将这些值绑定到params,如下所示:
foreach ($values as $key => $value) {
$sqlprep->bindParam(':' . $key, $value , PDO::PARAM_STR);
}
答案 1 :(得分:0)
https://stackoverflow.com/a/10060755/1747411
检查第二个例子,你必须用绑定重复值
e.g
VALUES(:username1,:pass1,:email1,:token1,now()),(:username2,:pass2,:email2,:token2,now())
和bindParam with loop
答案 2 :(得分:0)
因为你想保留你的bindparam我建议你使用这样的输入:
$ input = array('用户名' => $ username,' activationHash' => $ activationHash);
并在你的bindParam中添加如下代码:
public function register($input){
//code
$sqlprep->bindParam(':username', $input['username'], PDO::PARAM_STR);
//other
}
希望这能解决您的问题