使用PDO将多维POST保存到数据库

时间:2014-03-25 13:47:49

标签: php arrays

我正在学习如何使用PDO,到目前为止它一直很好。 我无法解决一个小问题。

我有一个包含2个字段的html表单,但点击+会添加另外2个字段。

Array ( [domainname] => Array ( [0] => google [1] => facebook [2] => stackoverflow ) [domainextension] => Array ( [0] => nl [1] => eu [2] => com ) ) 

我需要将其插入到我的数据库中。显然" google"属于" nl"等等。

$post = $_POST;
try {
    // Create a new PDO object (start database connection)
    $dbh = new PDO('mysql:host=localhost;dbname=domains', $user, $pass);

    // Build the query
    $sql = "INSERT INTO domain_list (name, ext, status)
            VALUES (:name,:ext,:status)";

    // Prepare the query
    $q = $dbh->prepare($sql);

    // Execute the query
    $q->execute(array(':name' => $name, 
                      ':ext' => $ext, 
                      ':status' => $status));

    // End the database connection connection
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

状态:这就是&#34;活跃&#34;,所以我可以用它来选择。

我知道我只需要创建一个foreach,以便所有行都更新到数据库,但我不知道最好的方法。

提前致谢。

2 个答案:

答案 0 :(得分:5)

你应该尝试类似的东西:

for ($i=0;$i<count($_POST['domainname']);$i++) {
  $name = $_POST['domainname'][$i];
  $ext = $_POST['domainextension'][$i];
  $status = $_POST['status'][$i]; //Since you have not provided what $status is, this is my guess
  $q->execute(array(':name' => $name, 
                      ':ext' => $ext, 
                      ':status' => $status));
}

答案 1 :(得分:0)

不是在PHP上重构数组,而是只更新输入的创建方式,以便将名称和扩展名保存在一起:

<input name="domain[0][name]">
<input name="domaon[0][ext]">
<input name="domain[1][name]">
<input name="domaon[1][ext]">

然后,您可以循环遍历$_POST["domain"]数组并自行使用name / ext属性。

您还可以使用PHP内置的构造进行多个数组迭代:

$mit = new MultipleIterator;
$mit->attachIterator (new ArrayIterator ($_POST["domainname"]), "name");
$mit->attachIterator (new ArrayIterator ($_POST["domainext"]), "ext");
foreach ($mit as $domain) {
    // $domain["name"] / $domain["ext"]
}