Hei!
Minulla on tietokanta, jossa on taulu X ja sarakkeet Z ja Y. Koitan lisätä mysql_query()-funktiolla tietoa tauluun, mutta vain Z-sarakkeen tiedot menevät. Y-sarakkeeseen menevä tieto on vähän eriskummallisen muotoista:
array(20) { [0]=> array(3) { ["Something"]=> float(543) ["Something2"]=> float(454) ["Something3"]=> float(433) } [1]=> array(3) { ["Something"]=> float(814) ["Something2"]=> float(681) ["Something3"]=> float(649) } [2]=> array(3) { ["Something"]=> float(1221) ["Something2"]=> float(1021) ["Something3"]=> float(974) } [3]=> array(3) { ["Something"]=> float(1832) ["Something2"]=> float(1532) ["Something3"]=> float(1461) } [4]=> array(3) { ["Something"]=> float(2748) ["Something2"]=> float(2298) ["Something3"]=> float(2192) } [5]=> array(3) { ["Something"]=> float(4123) ["Something2"]=> float(3447) ["Something3"]=> float(3288) } [6]=> array(3) { ["Something"]=> float(6185) ["Something2"]=> float(5171) ["Something3"]=> float(4932) } [7]=> array(3) { ["Something"]=> float(9277) ["Something2"]=> float(7757) ["Something3"]=> float(7398) } [8]=> array(3) { ["Something"]=> float(13916) ["Something2"]=> float(11635) ["Something3"]=> float(11097) } [9]=> array(3) { ["Something"]=> float(20874) ["Something2"]=> float(17453) ["Something3"]=> float(16645) } [10]=> array(3) { ["Something"]=> float(31312) ["Something2"]=> float(26179) ["Something3"]=> float(24968) } [11]=> array(3) { ["Something"]=> float(46968) ["Something2"]=> float(39269) ["Something3"]=> float(37453) } [12]=> array(3) { ["Something"]=> float(70452) ["Something2"]=> float(58904) ["Something3"]=> float(56180) } [13]=> array(3) { ["Something"]=> float(105678) ["Something2"]=> float(88357) ["Something3"]=> float(84270) } [14]=> array(3) { ["Something"]=> float(158517) ["Something2"]=> float(132535) ["Something3"]=> float(126405) } [15]=> array(3) { ["Something"]=> float(237776) ["Something2"]=> float(198803) ["Something3"]=> float(189608) } [16]=> array(3) { ["Something"]=> float(356664) ["Something2"]=> float(298205) ["Something3"]=> float(284412) } [17]=> array(3) { ["Something"]=> float(534996) ["Something2"]=> float(447308) ["Something3"]=> float(426618) } [18]=> array(3) { ["Something"]=> float(802495) ["Something2"]=> float(670962) ["Something3"]=> float(639927) } [19]=> array(3) { ["Something"]=> float(1203742) ["Something2"]=> float(1006444) ["Something3"]=> float(959890) } }
Y-sarake on TEXT-muotoinen. Missä on vika, kun tämä ei mene tietokantaan?
Jos tarkoituksella kirjoitit pulmapähkinän, johon on mahdollisimman vaikea arvata vastaus, niin onnistuit hienosti!
Jos taas oikeasti haluaisit tietää vastauksen, niin laita ihmeessä näkyviin se mysql_query() -funktiolla suoritettava SQL-kysely (tyyliin INSERT INTO ...) ja MySQL:n ilmoittamat virheilmoitukset.
Oletko käsitellyt tuon merkkijonon kaikin tarpeellisin toimin?
Siis mysql_real_escape_string ja oletko tarkistanut or die(mysql_error()) toiminnolla että query lause onnistuu?
Veikkaan että tuo jälkimmäien on jäänyt tekemättä, koska tietokannan joihinkin kenttiin jotain tallentuu. ;)
Grez: Ei ollut tarkoitus tehdä mitään pulmapähkinää, vaan oikeasti on tämmöinen ongelma johon haluan vastauksen. En laittanut sitä esille sen takia, koska siinä ei ole mielestäni mitään vikaa.
<?php mysql_query("INSERT INTO rakennukset(nimi, kustannukset) VALUES('$nimi', '" . mysql_real_escape_string(var_dump($tasot)) . "')") or die(mysql_error());
MySQL ei palauta mitään virheilmoituksia.
Vastaan jo seuraavaan kysymykseen, sisältääkö $tasot jotakin, ja mitä var_dump($tasot) tulostaa: Kyllä, ne ovat kunnossa.
Mahtaako tuo olla aito "merkkijono" kun se tulee suoraan var_dump-funktiolta?
Katsopa dokumentaatiosta mitä var_dump() palauttaa: https://www.php.net/manual/en/function.var-dump.php
Jollakin konstilla sen kai saa merkkijonoksi:
php.net kirjoitti:
Tip
As with anything that outputs its result directly to the browser, the output-control functions can be used to capture the output of this function, and save it in a string (for example).
En kyllä ymmärrä miksi sinne tietokantaan pitää tuota dataa tuossa muodossa edes yrittää tunkea... sotii aika mukavasti vastaan kaikkia tietokannan periaatteita.
Pekka Mansikka kirjoitti:
Jollakin konstilla sen kai saa merkkijonoksi
<?php $x = array(1, 2, 3, true); ob_start(); var_dump($x); $sisalto = ob_get_contents(); ob_end_clean(); var_dump($sisalto);
Tein noin kuin trilog näytti. Kun se haetaan tietokannasta, niin miten sen voi muuttaa takaisin arrayksi?
Macro kirjoitti:
miten sen voi muuttaa takaisin arrayksi?
Ei suoraan mitenkään. Jos on pakko käyttää tuollaista tapaa niin käytä PHP:n serialize-funktiota ja purkuun unserializea. Tai sitten sitä JSONia.
Jos sinulla jo alkuaan oli se erilaisena merkkijonona, niin kannattaisko se tallentaa sellaisenaan kantaan, niin tarvitsee muuttaa arrayksi vain kerran. ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.