PDO:使用增量密钥在MySQL中插入数组

时间:2014-08-02 09:14:05

标签: php mysql arrays pdo sql-insert

我已经查看了有关在PDO中插入数组的所有其他帖子,但一直无法确切知道如何执行此操作。我想接受这个:

$images_ar = 
Array
(
[0] => Array
    (
        [0] => 100
        [1] => Lips
        [2] => 50
        [3] => 50
        [4] => 127
        [5] => 257
        [6] => 9998
        [7] => 70
        [8] => xxx
    )

[1] => Array
    (
        [0] => 103
        [1] => Ball
        [2] => 117
        [3] => 114
        [4] => 128
        [5] => 44
        [6] => 9997
        [7] => 70
        [8] => xxx
    )

[2] => Array
    (
        [0] => 104
        [1] => Sun
        [2] => 94
        [3] => 91
        [4] => 48
        [5] => 277
        [6] => 9996
        [7] => 70
        [8] => xxx
    )

)

执行PDO插入,其中[0] = image_id和[9] = avatar_id。

利用其他帖子,到目前为止,我有这个:

$images_ar = array_chunk($ar, 9);

$handler->beginTransaction();

foreach($images_ar as $row){
   $question_marks[] = "('',?,?,?,?,?,?,?,?)";
}

$query = $handler->prepare ("INSERT INTO avatars (ID, img_id, title, width, height, top, left, zindex, userid, avatar_id) VALUES " . implode(',', $question_marks);

$query->execute($ar);

$handler->commit();

错误:     
致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在'left,zindex,userid,avatar_id)附近使用正确的语法('',?,?,?,?,?,?,?,?),(' ',?,?,?,?,?,?,?,?'在第1行'... save.php:52 堆栈跟踪:0 ... \ save.php(52):PDO-> prepare('INSERT INTO ava ...') 1 {主}   在 52

我是在正确的轨道上吗?

谢谢你们! = d

1 个答案:

答案 0 :(得分:1)

我可以通过使用array_combine()方法更改密钥来使其工作。

最终代码是:

$images_ar = array_chunk($ar, 9);
$keys = array('img_id', 'title', 'width', 'height', 'top', 'lef', 'zindex', 'userid', 'avatar_id');
foreach ($images_ar as $row) {  
    $list[] = array_combine($keys, array_values($row));
}
$handler->beginTransaction();
foreach($images_ar as $row){
   $question_marks[] = "(DEFAULT,?,?,?,?,?,?,?,?,?)";
}
$query = $handler->prepare ("INSERT INTO avatars (ID, img_id, title, width, height, top, lef, zindex, userid, avatar_id) VALUES " . implode(',', $question_marks));
$query->execute($ar);
$handler->commit();