ugrás a tartalomhoz

Unknown column 'Budapest' in 'field list'

csoma · 2012. Feb. 27. (H), 17.42
Sziasztok,

van egy array-em,

$invoiceAddress = array("city" => "Budapest", "ZIP" => "1231" , "nameofaddress" => "Tokoli");

aminek a tartalmát be szeretném küldeni a DB-be. Így oldottam meg:

$query="INSERT INTO address (ID, ".implode(',',array_keys($invoiceAddress)).") VALUES ('$this->ID', ".implode(',',array_values($invoiceAddress)).")";

A DB-ben az oszlopok nevei egy az egyben egyeznek az array key-vel. Ezt a hibát kapom rá:

Unknown column 'Budapest' in 'field list'.

Kérdésem, hogy valami szintaktikai hiba van benne, vagy inkább valami elvi hiba? Mi a jó megoldás?

Csoma
 
1

escape, string

Poetro · 2012. Feb. 27. (H), 17.50
Ugye először is megfelelően escape-elni kell az értékeket, például mysql_real_escape_string segítségével (persze még jobb lenne ha PDO-t vagy más OOP / db réteget használnál a kérések felépítésére, és nem te írnád meg kézzel), valamint a string-eket ugye idézőjelbe kell tenni. Ezt a kettőt kombinálhatod például úgy, hogy csinálsz egy függvényt, ami megfelelően escape-el, és idézőjelbe is rak minden stringet, és ezt array_map-pal lefuttatod az összes elemre.
2

Így hirtelen

Pepita · 2012. Feb. 27. (H), 18.09
Az okot nem látom, de tény, hogy a mezőlistába bekerül a "Budapest" érték is. Én biztos, hogy több lépésben raknám össze ezt a kérést.
(A több programsor sok esetben egyáltalán nem jelent hosszabb futásidőt, viszont átláthatóbb.)
A $query értékét ha kiíratod, mi van benne?
Feltételezem, hogy a VALUES listában kellene lennie '-oknak, de nincs.
3

az ok

plip · 2012. Feb. 27. (H), 20.51
"Az okot nem látom,.."

Az ok az, hogy a Budapest sztring nincs idézőjelben, ezért mezőnévnek gondolja a mysql.

('$this->ID', ".implode(',',array_values($invoiceAddress)).")
helyett
('".$this->ID."', '".implode("','",array_values($invoiceAddress))."')
Persze az escape-elésre ez még nem megoldás!
4

Na ez már

Pepita · 2012. Feb. 27. (H), 21.21
jobbnak tűnik, de eléggé átláthatalan így egy sorban (nem is lennék benne biztos, hogy jó). Az implode-ot nyugodtan csinálhatnád külön egy változóba, stb.

Igen, escape-elni ettől még kell, de azt is könnyebb lenne, ha csinálsz előbb egy $values tömböt a megfelelő ('"`) jelekkel együtt, és ezt escape-elve szúrod be a query-be.

Szerk.:
Bocsánat! Azt hittem te vagy a kiinduló kérdező, aszerint fogalmaztam.
5

Bocsánat! Azt hittem te vagy

kuka · 2012. Feb. 28. (K), 10.04
Bocsánat! Azt hittem te vagy a kiinduló kérdező, aszerint fogalmaztam.
Bocs, ismét egy önreklám. A Weblabor - Tag jelölés kiemeli a témaindító tag válaszait. Nálam hatásosan megelőzi az effajta melléfogásokat.
6

Off: Ott már jártam...

Pepita · 2012. Feb. 29. (Sze), 00.51
Szégyen ide v. oda, én bizony nem tudom, hogy tunnnám aztat a js-eket magamhoz (böngészőhöz) csatolmányozni. IE8. A használatot értettem, ki is próbálnám.
7

GreaseMonkey

Poetro · 2012. Feb. 29. (Sze), 01.03
Olyan böngészőt használj, amihez van GreaseMonkey kiegészítő. Tudtommal a MS böngészőjén kívül mindhez van. Jah, és természetesen használ pár fejlettebb DOM eszközt, amiket az IE8 még nem ismer.
8

Explorerhez a Trixiet

kuka · 2012. Feb. 29. (Sze), 10.47
Explorerhez a Trixiet javasolják, de mivel az utolsó verzió 2005-ös, nem fűznék hozzá sok reményt.

Közel kizárólag Firefox+Greasemonkey számára írtam a szkripteket, némelyre ránéztem Chrome+Tampermonkey alatt is. Tulajdonképpen működnek, de a CSS-ből kispórolt -webkit- vendor prefixek miatt általában csúnyák. (Bár a formatervezési képességeim miatt ezt inkább előnyként kellene említeni.)

Igény esetén kész volnék figyelmet szentelni a Chrome és Opera kompatibilitásra. (Nem tudom a userscripts.org „Installed 156 times.” adata tényleg érdeklődésből vagy ostoba botok tevékenységéből származik. Persze lehet a valóságban uninstalled 155 times is tartozna hozzá, de azt ők már nem tudják mérni.)
9

Opera

Poetro · 2012. Feb. 29. (Sze), 12.17
Pár módosítással Opera alatt is működésre bírtam. Persze egyszerűbb lett volna, ha valamivel szebb a kód, de azért megoldottam. Ha kell, majd átküldöm / felrakom valahova.