使用PHP PDO为每个$ _POST插入行

时间:2014-07-29 05:28:23

标签: php mysql post pdo foreach

我有一个由while循环生成的动态表单,如下所示:

<form>
<?php while ($questions = $query->fetch(PDO::FETCH_ASSOC)) { ?>
<textarea name="text"></textarea>
<input type="hidden" name="question_id" value="<?php echo $questions['question_id']; ?>">
<?php } ?>
</form>

我正在尝试插入每个回复&#39;和&#39; question_id&#39;进入自己的行。我不确定是将$ _POST变量发送为text []这样的数组还是执行foreach循环或者两者兼而有之?

基本上我想做以下事情:

foreach($_POST) {
    $query = $db->prepare("INSERT INTO responses SET text=:text, question_id=:question_id);
    $query->bindValue(':text', $_POST['text'], PDO::PARAM_STR);
    $query->bindValue(':question_id', $_POST['question_id'], PDO::PARAM_INT);
    $query->execute();
}

我已经读过这样多次执行查询效率也很低。

最好的办法是什么?

3 个答案:

答案 0 :(得分:2)

很简单,你只需要稍微改善你的循环,你只需要一个查询......

$query = $db->prepare("INSERT INTO responses SET text=:text, question_id=:question_id");

foreach ($_POST as $key => $value) {
    if($key == "text") {
        $query->bindValue(':text', $value, PDO::PARAM_STR);
    } else if($key == "question_id") {
        $query->bindValue(':question_id', $value, PDO::PARAM_INT);
    }
}

$query->execute();

答案 1 :(得分:0)

像这样设置textarea数组的id

<form>
<?php while ($questions = $query->fetch(PDO::FETCH_ASSOC)) { ?>
<textarea name="text[<?php echo $questions['question_id']; ?>]"></textarea>
<?php } ?>
</form>

然后你可以循环遍历$ _POST [&#39; text&#39;]数组

foreach($_POST['text'] as $k => $val) {
    $query = $db->prepare("INSERT INTO responses SET text=:text, question_id=:question_id);
    $query->bindValue(':text', $val, PDO::PARAM_STR);
    $query->bindValue(':question_id', $k, PDO::PARAM_INT);
    $query->execute();
}

答案 2 :(得分:0)

帖子的价值如下:

<textarea name="text"></textarea>

在服务器端:

$_POST["text"]

如果您想通过POST传输多维数组,请使用:

<textarea name="text[]"></textarea>
<textarea name="text[]"></textarea>
<textarea name="text[]"></textarea>

在服务器端:

$_POST["text"][0]; //1
$_POST["text"][1]; //2
$_POST["text"][2]; //3

当然可以使用键:

<textarea name="text[foo]"></textarea>
<textarea name="text[boo]"></textarea>
<textarea name="text[]"></textarea>

在服务器端:

$_POST["text"]["foo"]; //1
$_POST["text"]["boo"]; //2
$_POST["text"][0]; //3