Ik krijg het niet voor elkaar een array in een database te plaatsen. Wie weet er raad?
Ik vermoed dat het met een implode moet. Dit is wat ik tot nu toe heb:
// de array heeft de naam $r --> $r[] = array (
$string=implode("','",$r);
mysql_query("INSERT INTO test ('', url, name, location, phone) VALUES ('$string')");
Voor je die implode doet, eerst even een fout uit je query halen. Een auto_increment veld moet je niet in je insert query opnemen. Die vult de database namelijk zelf in. Vul je een lege waarde in dan gaat het wel goed, maar je krijgt wel een warning van de database dat er iets niet goed ging. Alleen wat jij nu doet gaat wel echt fout, want je vult nu een lege string in als kolomnaam en dat kan in geen geval.
Dan je implode van de waardes, dat zal een dubbele moeten worden. Als je namelijk meerdere records tegelijk wilt invoeren moet dat op deze manier:
INSERT INTO test (url, name, location, phone)
VALUES ('url', 'name', 'location', 'phone'), ('url', 'name', 'location', 'phone'), ('url', 'name', 'location', 'phone');
Je moet dus eerst een implode maken per record en dan voor alle records:
Ahh... een dubbele implode, daar had ik echt nooit aan gedacht. Bedankt!
Ik heb de database gewijzigd naar:
CREATE TABLE IF NOT EXISTS `test` (
`id` int(10) NOT NULL,
`url` varchar(200) NOT NULL default '',
`name` varchar(200) NOT NULL default '',
`location` varchar(200) NOT NULL default '',
`phone` varchar(200) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Hierna de code erin gezet, maar er komen geen records in de database.
Ik krijg ook geen foutmeldingen, dus ik heb geen flauw idee waar het niet goed zit?!
Wel gevonden dat $records het volgende gaf: ("Array','Array','Array','Array"),
Hierna de desbetreffende regel gewijzigd naar: $records[] = '(\''.implode( "','", $data ).'\')';
De foutmeldingen aangezet. Ik krijg:
<b>Notice</b>: Array to string conversion in <b>/test.php</b> on line <b>59</b><br />
Regel 59 is bij mij: $records[] = '("'.implode( "\",\"", $data ).'")';
Je hebt nu je auto increment van je id afgehaald, maar er wel een NOT NULL bij laten staan. Dat betekent dat je WEL je id moet opnemen in een insert, met een correcte integer waarde. Die waarde moet overigens dan ook nog uniek zijn omdat je er een primary key op hebt zitten.
De fout in mijn script zat overigens in wat omgedraaide quotes. Heb ik nu aangepast.
Het 'ik krijg geen foutmeldingen' ligt wellicht aan het feit dat je dat niet controleert?
Al je waardes in de array zijn ook weer arrays, dus dan kan je imploden zoveel je wilt, maar met een heel vreemd resultaat zoals je zelf ook al geconstateerd hebt.
Ah, maar er zit nog een probleem in je array zie ik nu. Elk veld is niet een string, maar een array, met daarin een string. Dan kan je het niet meer met een implode doen. De eerste implode (binnen de foreach) zal je anders moeten doen. Je zal elk element af moeten lopen om de waardes eruit te krijgen.
Jeetje, ingewikkeld zeg. Ik was al blij dat ik de data op mijn scherm kreeg, in een DB is andere koek.
Hoe ik de eerste implode dien te veranderen weet ik echt niet?!
Voor de volledigheid hier de code zoals ik het nu heb:
mysql_query( "INSERT INTO test (url, name, location, phone) VALUES ".$records );
print_r($records);
?>
en de DB zet er met bovenstaande script de waarde 'array' in.
het veld ID heb ik op andere waardes gezet dan NOT NULL en auto increment, maar dat werkte niet goed.
Nu ziet deze er als volgt uit:
CREATE TABLE IF NOT EXISTS `test` (
`id` int(10) NOT NULL auto_increment,
`url` varchar(200) NOT NULL default '',
`name` varchar(200) NOT NULL default '',
`location` varchar(200) NOT NULL default '',
`phone` varchar(200) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=934 ;