php pdo多数组插入

标签 php arrays insert pdo

我已经玩了几个小时并试图解决这个问题,但看起来很难破解。

我可以进行单个数组插入

$person = array('name' => 'Wendy', 'age' => '32');

但是如果我想要这样的多个:

$person = array(array('name'=>'Dan', 'age'=>'30'), array('name' => 'John', 'age' => '25'), array('name' => 'Wendy', 'age' => '32'));

它不起作用?任何帮助将不胜感激。

对于多次插入:

public function insertPdo($table, $data){
    try{
        if (!is_array($data) || !count($data)) return false;

        $bind = ':' . implode(', :', array_keys($data));      
        $sql = 'INSERT INTO ' . $table . ' (' . implode(', ',array_keys($data)) . ') ' . 'values (' . $bind . ')';

        $sth = $this->__dbh->prepare($sql);
        $result = $sth->execute($data);

    }
    catch(PDOException $e){
        echo $e->getMessage();
    }
}

单次插入

$person = array('name'=>'Dan', 'age'=>'30');
$db->insertPdo('test_pdo',$person);

// For Multi Insertion, I'm trying to use this in above function
foreach ($data as $row) {
    $result = $sth->execute($row);
};

$person = array(array('name'=>'Dan', 'age'=>'30'), array('name' => 'John', 'age' => '25'), array('name' => 'Wendy', 'age' => '32'));
$db->insertPdo('test_pdo',$person);

错误:

Error: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

最佳答案

要利用 MySQL 中多次插入的插入速度 (http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html),您可以使用构建更大查询的准备语句。这确实增加了迭代方法的复杂性,因此可能只对高要求系统或大型数据集才值得。

如果您有上述建议的数据:

$person = array(array('name'=>'Dan', 'age'=>'30'), array('name' =>
'John', 'age' => '25'), array('name' => 'Wendy', 'age' => '32'));

我们希望生成如下所示的查询:

insert into table (name, age) values (?,?), (?,?), (?,?);

要将其组合在一起,您需要一些与此完全不同的东西:

$pdo->beginTransaction() // also helps speed up your inserts
$insert_values = array();
foreach($person as $p){
   $question_marks[] = '(?,?)';
   $insert_values = array_merge($insert_values, array_values($p));
}

$sql = "INSERT INTO table_name (name, age) VALUES " . implode(',', $question_marks);

$stmt = $pdo->prepare ($sql);
try {
    $stmt->execute($insert_values);
} catch (PDOException $e){
    // Do something smart about it...
}
$pdo->commit();

关于php pdo多数组插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12205432/

相关文章:

PHP: 内爆 ('\n' , $appArray) 生成额外的 '\'

php - 获取 PHP 项目的根目录路径

php - 404 资源未找到 api-platform

mysql - 表大小会影响 INSERT 性能吗?

php - INSERT SELECT 查询中的自定义值

php - 对于相同的测试套件,MySQL 5.7 比 5.5 慢 3 倍

javascript - 拼接删除错误的索引

javascript - 将数组合并到对象以及将对象合并到数组

javascript - 从数组中拼接出意外的元素?

sql - 数据库错误 : Duplicate Entry