加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php pdo多数组插入

发布时间:2020-12-13 17:20:56 所属栏目:PHP教程 来源:网络整理
导读:我已经玩了几个小时,试图解决这个问题,但看起来很难解决. 我能够进行单个阵列插入 $person = array('name' = 'Wendy','age' = '32'); 但如果我想要这样的多个: $person = array(array('name'='Dan','age'='30'),array('name' = 'John','age' = '25'),array(
我已经玩了几个小时,试图解决这个问题,但看起来很难解决.

我能够进行单个阵列插入

$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' => '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',array('name' =>
'John','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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读