如何将数组中的数据存储到mySQL数据库中?

时间:2015-07-31 12:18:09

标签: php pdo

我想将数据中的数据存储到我的数据库中。

当我执行print_r($animals);时,这就是我的数组的外观:

Array
(
    [0] => Array
        (
            [animal] => Cat
            [name] => Tom
        )

    [1] => Array
        (
            [animal] => Dog
            [name] => Bob
        )

    [2] => Array
        (
            [animal] => Bird
            [name] => Sam
        )
    [3] => ....

这是我尝试存储数据的方式,但由于某些原因它无法正常工作,所以不存储任何内容:

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO animals (animal,name) values(?,?) ";
$q = $pdo->prepare($sql);
foreach($animals as $row) {
   $q->execute(array(
      $row['animal'],
      $row['name'],));
}
Database::disconnect();

如果我编写以下内容,例如存储工作,但只存储第一个条目(Cat和Tom)

foreach($animals as $row) {             
    $name = $row['name'];
    $animal = $row['animal'];
}

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO animals (animal,name) values(?,?) ";
$q = $pdo->prepare($sql);
$q->execute(array($animal,$name));
Database::disconnect();      

3 个答案:

答案 0 :(得分:1)

你的第一次尝试更有意义。请记住,您只需prepare一次参数化语句,然后只要您愿意每次更换参数,就可以运行1000次。

另外,当您将PDO设置为在出错时发出异常时,您应该在Try / Catch块中对此进行编码

    try {
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO animals (animal,name) values(?,?) ";

        $q = $pdo->prepare($sql);

        foreach($animals as $row) {

            $q->execute(array($row['animal'], $row['name']));
        }
    }
    catch (PDOException $pe) {
        echo $pe->getMessage();
    }
    catch (Exception $e ) {
        echo $e->getMessage();
    }
    Database::disconnect();

答案 1 :(得分:1)

像这样修改你的代码,它会起作用。

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
foreach($animals as $row) {
   $sql = "INSERT INTO animals (animal,name) values($row['animal'], $row['name']) ";
   $q = $pdo->prepare($sql);
   $q->execute();
}
Database::disconnect();

我无法解释清楚,但我知道CodeIgniter Framework以这种方式使用PDO进行SQL执行。

答案 2 :(得分:0)

第一个你得到语法错误的额外逗号:

foreach($animals as $row) {
   $q->execute(array(
      $row['animal'],
      $row['name'],));//extra comma
}

第二个你在顶部循环覆盖变量。这意味着它将插入最后一行。

因此,为每个删除逗号或使用for循环:

for($i=0; $i< count($animals); $i++) {
   $q->execute(array(
      $animals[$i]['animal'],
      $animals[$i]['name']));
}
相关问题