我有一个这样的数组,其中包含很多行,我需要使用 PDO 将其插入 MySQL 数据库
array(3067) {
[0]=>
array(2) {
["order"]=>
string(7) "2854811"
["consignment"]=>
string(0) ""
}
[1]=>
array(2) {
["blah"]=>
string(7) "2854811"
["whatever"]=>
string(2) "someval"
}
[4]=>
array(2) {
["blah"]=>
string(7) "2864412"
["whatever"]=>
string(0) ""
}
我已经尝试过在这里提出的各种建议组合,但每个建议都会收到不同的错误消息
我试过这个
$db->beginTransaction();
$stmt = $db->prepare("INSERT INTO mytable (column1, column2) VALUES (:blah, :whatever)");
foreach($test as $insertRow){
// now loop through each inner array to match binded values
foreach($insertRow as $column => $value){
$stmt->bindParam(":{$column}", $value);
$stmt->execute();
}
}
$db->commit();
但我收到此错误消息
带有消息“SQLSTATE [HY093]”的未捕获异常“PDOException”:参数编号无效:绑定变量的数量与标记的数量不匹配
我也试过
$sql = 'INSERT INTO mytable (blah, whatever) VALUES ';
$insertQuery = array();
$insertData = array();
$n = 0;
foreach ($input as $row) {
$insertQuery[] = '(:blah' . $n . ', :whatever' . $n . ')';
$insertData['blah' . $n] = $row['blah'];
$insertData['whatever' . $n] = $row['whatever'];
$n++;
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
}
但我收到此错误消息,因为“blah”的每个长度都是相同的
未捕获的异常“PDOException”,带有消息“SQLSTATE [22001]:字符串数据,右截断:1406 行 1625 的列 'order_number' 的数据太长”
如何让我的数组插入数据库?如果我必须执行多次或只执行一次,只要我能插入它,我就不会挑剔。
编辑
我想做的是读入一个文本文件并将其插入一个完美运行的数组中,所以我剩下的只是一个具有大约 3000 行的关联数组,它们每个都包含一个名为“blah”和“whatever”的字段.
获得数组后,我需要将其插入 MySQL 数据库
CREATE TABLE IF NOT EXISTS `tracker` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`blah` varchar(8) NOT NULL,
`whatever` varchar(25) NOT NULL,
`input_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
我最终应该从我的数组中插入大约 3000 行。
我希望这是有道理的。如果没有我会添加更多