Имеется массив массивов $m и таблица БД из трёх (упрощённо) элементов (полей) - mediumint, mediumint и varchar.
Имею 3 рабочих варианта записать массив в БД.
Но все они примерно одинаково медленные.
Как ускориться?
Можно без PDO или без одного из циклов или с циклом другого вида (значения числовых полей
не непрерывные, были удаления элементов) или вообще без циклов одним INSERT'ом (здесь смайлик) или ещё как-то.
$pdo=new PDO("mysql:host=$host;dbname=$dbname;charset=$charset",$username,$password);
$insert='INSERT INTO table1 (i1,i2,s1) VALUES (:i1,:i2,:s1)';
$q=$pdo->prepare($insert);
foreach ($m as $key=>$value){
foreach ($value as $value1){
$q->bindParam(':i1',$key,PDO::PARAM_INT);
$q->bindParam(':i2',$value1[0],PDO::PARAM_INT);
$q->bindParam(':s1',$value1[1],PDO::PARAM_STR);
$q->execute();
};
};
$pdo=new PDO("mysql:host=$host;dbname=$dbname;charset=$charset",$username,$password);
foreach ($m as $key=>$value){
foreach ($value as $value1){
$insert='INSERT INTO table1 (i1,i2,s1) VALUES ('.$key.','.$value1[0].",'".$value1[1]."')";
$q=$pdo->prepare($insert);
$q->execute();
};
};
$pdo=new PDO("mysql:host=$host;dbname=$dbname;charset=$charset",$username,$password);
foreach ($m as $key=>$value){
foreach ($value as $value1){
$insert="INSERT INTO table1 (i1,i2,s1) VALUES ({$key},{$value1[0]},'{$value1[1]}')";
$q=$pdo->prepare($insert);
$q->execute();
};
};
UPD:
Наткнулся на вариант: записать массив в текстовый файл и командой LOAD DATA INFILE загрузить оный в базу. Может будет быстрее.