【问题标题】:PDO: Inserting array in MySQL with Incremental Keys [duplicate]PDO:使用增量键在 MySQL 中插入数组 [重复]
【发布时间】:2014-08-02 09:14:04
【问题描述】:

我查看了有关在 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();

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

行的 ...\save.php 中抛出

我走对了吗?

谢谢各位! =D

【问题讨论】:

  • 首先,LEFTreserved word in MySQL
  • 我认为你也必须用这些值来展平你的数组。
  • $image_ar 是平面 $ar 的分块版本。我把它扔掉了,这样我就可以通过foreach() 传递分块数组,这样我就可以生成一个占位符数组.....用反引号包裹left 是否可以解决保留字问题?
  • 别管我的问题。我刚决定更改列名。

标签: php mysql arrays pdo sql-insert


【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2017-02-10
    相关资源
    最近更新 更多