PHP PDO从数组绑定值的正确方法

时间:2015-12-23 15:22:39

标签: php mysql arrays pdo

我正在努力改善使用PDO,我有这个代码:

sed -n "/$(date +%Y-%m-%d)/p" en.html

这段代码对我很有用,但我读过我应该只调用一次 $answers_count = count($answers); $save_answers = $conn->prepare("INSERT INTO answers (answer, is_correct, question_id) VALUES (:answer, :is_correct, :question_id)"); for($i = 0; $i < $answers_count; $i++) { $save_answers->bindParam(':answer', $answers[$i]); $save_answers->bindParam(':is_correct', $answers_state[$i]); $save_answers->bindParam(':question_id', $last_insert_id); $save_answers->execute(); } 方法,如果我理解正确,我必须准备一次sql语句并在绑定params后执行它?如果我使用execute()方法一次插入一条新记录,但如果将execute()语句放在for循环之外,则只执行一个INSERT查询。

我在这里做错了吗,是否有其他更简单的方法来绑定数组中的值,每次数组元素的数量都可以不同。

提前感谢您提供给我的信息。

2 个答案:

答案 0 :(得分:1)

  

但是如果放置$ save_answers-&gt; execute();在for循环之外的语句只会执行一个INSERT查询。

这是因为如果将execute语句放在循环之外,它只会对for循环的最后一次迭代绑定的值执行一次查询。因此,您当前的代码是正确的,重新绑定和重新执行查询应该是要走的路。

查询需要绑定每次迭代的值(每个答案都有不同的值,因此每个插入都有不同的插入值)。显然你需要重新绑定每个答案的值,所以这样做一次不会为你削减它。

如果您不想通过for循环执行它,可以尝试批量插入:

  

PDO Prepared Inserts multiple rows in single query

这将允许您在对数据库的一个请求中插入多行,这可能是您正在寻找的。

答案 1 :(得分:1)

首先准备查询然后执行

$answers_count = count($answers);
$writeArguments = array();
$writeQuery="insert into $tableName (answer, is_correct, question_id) values ";
for($i = 0; $i < $answers_count; $i++) {
    if (i > 0) {
            $writeQuery .= ',';
    }
    $writeQuery .= '(?,?,?)';
    array_push($writeArguments, $answers[$i], $answers_state[$i], $last_insert_id);
}
$save_answers = $conn->prepare($writeQuery);
$save_answers->execute($writeArguments);