我想将数据中的数据存储到我的数据库中。
当我执行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();
答案 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']));
}