使用单个参数并使用bindParam插入大量记录

时间:2015-03-19 09:08:33

标签: php arrays 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。我想我可以使用阵列,但我不知道正确的方法。所以我需要一些帮助,以便我能做到。

3 个答案:

答案 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
}

希望这能解决您的问题