【发布时间】: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
我走对了吗?
谢谢各位! =D
【问题讨论】:
-
首先,
LEFT是 reserved word in MySQL。 -
我认为你也必须用这些值来展平你的数组。
-
$image_ar是平面$ar的分块版本。我把它扔掉了,这样我就可以通过foreach()传递分块数组,这样我就可以生成一个占位符数组.....用反引号包裹left是否可以解决保留字问题? -
别管我的问题。我刚决定更改列名。
标签: php mysql arrays pdo sql-insert