Je hebt de binnenste foreach niet per se nodig als je weet welke kolom welke info bevat? Je $innerArray is equivalent met één weg te schrijven record als ik het goed begrijp?
Als de eerste kolom (met index 0) een (extern) id bevat, dan kun je hieraan refereren met $innerArray[0], je tweede kolom met $innerArray[1] etc.
Het hangt er een beetje vanaf hoe $values in elkaar zit.
Link gekopieerd
Hi $values ziet er zo uit:
Array ( [2] => Array ( [A] => [email protected] [B] => Minco [C] => Dermois ) [3] => Array ( [A] => [email protected] [B] => Patricia [C] => Detmers ) [4] => Array ( [A] => [email protected] [B] => Jan [C] => Doelen ) [5] => Array ( [A] => [email protected] [B] => Rob [C] => Dongelmans ) [6] => Array ( [A] => [email protected] [B] => Patricia [C] => Donker ) [7] => Array ( [A] => [email protected] [B] => Fons [C] => Dorrestijn ) [8] => Array ( [A] => [email protected] [B] => P. [C] => Duin ) [9] => Array ( [A] => [email protected] [B] => Mirjam [C] => Duivebode ) [10] => Array ( [A] => [email protected] [B] => Anita [C] => Ebbers ) [11] => Array ( [A] => [email protected] [B] => Hesam [C] => Ebrahimmalek ) [12] => Array ( [A] => [email protected] [B] => Dave [C] => Elbers ) [13] => Array ( [A] => [email protected] [B] => mjfm [C] => engelmann ) [14] => Array ( [A] => [email protected] [B] => Eric [C] => Faber ) [15] => Array ( [A] => [email protected] [B] => steven [C] => fernamd ) )
Ik zou graag willen weten hoe de query er uit moet zien om dit weg te schrijven ;-)
[size=xsmall]
Toevoeging op 17/03/2015 08:31:46: [/size]
mmmmm: ik kom al in de buurt
foreach($values as $row => $innerArray){
echo $innerArray['A'].'-' .$innerArray['B'].'-'.$innerArray['C']. "<br/>";
}
Link gekopieerd
De query die je nodig hebt, heeft deze vorm:
INSERT INTO
tabelnaam (emailadres, voornaam, achternaam)
VALUES
('[email protected] ', 'Minco', 'Dermois'),
('[email protected] ', 'Patricia', 'Detmers'),
('[email protected] ', 'Jan', 'Doelen');
Met andere woorden: per rij herhaal je de waarden uit de array voor (emailadres, voornaam, achternaam) in de databasetabel.
Link gekopieerd
Je kan er een bulk in sert van maken:
<?php
$bulk = array();
foreach ($values as $innerArray)
$bulk[] = "(" . $this->db->escape($innerArray['A'] . "," . $this->db->escape($innerArray['B'] .
',' . $this->db->escape($innerArray['C'] . ')';
}
$sql = 'IN SERT INTO subscribers (voornaam,achternaam,email)
VALUES ' . implode(',', $bulk);
?>
Even de spatie uit IN SERT halen zonder die krijg het niet gepost
Link gekopieerd
Hi Ward en Ger, bedankt voor je reactie!
Ik heb deze geprobeerd en werkt of is dit niet goed?
function saveExcel($data){
$sql = 'INSERT INTO subscribers (email, first_name, last_name ) VALUES ';
$values = array();
foreach ($data as $value) {
$values[] = '("' . $value['A'] .'","' . $value['B'] . '","' . $value['C'] . '")';
}
$sql .= implode(',', $values);
$this->db->query($sql);
}
Link gekopieerd
Lijkt me goed, maar je moet nog wel escapes toevoegen voor het geval waarden een ' bevatten.
Link gekopieerd
OK snap ik, maar hoe noteer ik dat? zoals Ger aangeeft?
$values[] = '("' . escape($value['A']) .'","'
Link gekopieerd
Als je de escape functie van CI gebruikt hoef je de strings ook niet te quoten, dit doet de escape functie.
Het beste is ook om geen dubbele quotes te gebruiken, SQL standaard is enkele quotes voor strings, en dubbele quotes voor identifiers (tabelnamen, kolomnamen etc.)
Link gekopieerd
Dus zo: ?
$values[] = '(' . escape($value['A']) .','........
of zo:
$values[] = '(" . escape($value['A']) .","........
Link gekopieerd
De eerste maar wel met $this->db->escape (escape is geen core ci functie maar onderdeel van de databasedriver)
Link gekopieerd