[php/mysql] query met variabelen samenstellen

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik gebruik dit stukje code om een sql-query samen te stellen:

PHP:
1
2
$sql = 'insert into ' . $table . ' (' . implode(', ', $TABLES[$table]) . ') 
values ("$' . implode('", "$', $TABLES[$table]) . '")';


Het resultaat van deze actie is:
code:
1
2
insert into pages (page_id, menu_id, volgnummer, titel, tekst) 
values ("$page_id", "$menu_id", "$volgnummer", "$titel", "$tekst")


(linebreak toegevoegd voor betere leesbaarheid)

De query wordt goed uitgevoerd, alleen worden de goede waarden uit de variabelen $titel, $tekst, etc. niet ingevoerd, maar de letterlijke tekst '$tekst'.

Hoe krijg ik MySQL nu aan het verstand dat-ie de variabelen moet gebruiken i.p.v. een dollarteken en het woordje 'tekst'?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

'$var' != "$var"

Doet iets met Cloud (MS/IBM)


  • Cartman!
  • Registratie: April 2000
  • Niet online
velen zullen t ranzig vinden denk ik, maar :

PHP:
1
$query = "INSERT INTO tabel (waarde1, waarde2, waarde3) VALUES ('$waarde1', '$waarde2', '$waarde3')";


werkt perfect....

Verwijderd

Topicstarter
Ja, bij mij normaal ook, maar niet in deze functie. (En ook met enkele quotes gaat het niet goed, FYI).

  • Cartman!
  • Registratie: April 2000
  • Niet online
waarom voer je dan niet eerst die implodes uit, dus voor dat je de query maakt? stuk overzichtelijker vind ik.

  • Edsger
  • Registratie: December 2000
  • Laatst online: 29-08 19:42
volgens mij probeert Arch code te generen VOOR php... dus in php, php code genereren, nee dat zal niet werken...

edit:
Om precieser te zijn, hij wil de namen van variabelen genereren met dat php commando, en dat de semantiek daarvan weer geinterpreteerd wordt door php. Ofwel dat de waardes aan de variabelen namen worden toegekend op het moment dat hij daarvan een string genereert. Dat gaat (uiteraard) niet.

[ Voor 58% gewijzigd door Edsger op 26-02-2004 15:28 ]

All your quantifications are belong to me!


Verwijderd

Topicstarter
@ g00fy:
Dit werkt ook niet:
PHP:
1
2
3
$rows = implode(', ', $TABLES[$table]);
$values = implode('\', \'$', $TABLES[$table]);
$sql = 'insert into ' . $table . ' (' . $rows . ') values (\'$' . $values . '\')';


@ Edsger: Eigenlijk is het code voor MySQL, lijkt mij. Maar hoe zou ik het dan wel kunnen doen?

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Om dit te laten werken moet je eval() gebruiken. eval() wordt overigens wel gezien als een ontzettend ranzige oplossing.

There's no place like 127.0.0.1


  • Cartman!
  • Registratie: April 2000
  • Niet online
ArachCarrier, maak er anders dit van :

PHP:
1
$sql = "INSERT INTO $table ($rows) values ('$values')";

lijkt me sterk dat dat niet werkt :?


edit : " vergeten

[ Voor 14% gewijzigd door Cartman! op 26-02-2004 15:41 ]


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Nee, Edsger heeft gelijk...

Iets als hieronder zou wel moeten werken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
$columns = implode(',', $TABLES[$table]);

reset ($TABLE[$table]);
while (list($key, $value) = each($TABLE[$table])) 
{
$values[] = ${$value};
}

$values = "'" .implode("','" ,$values) ."'";

mysql_query("INSERT INTO $table ($columns) ($values)");


typevouten voorbehouden :)

Regeren is vooruitschuiven


Verwijderd

Topicstarter
@ MatHack: Waarom is eval() ranzig? Het lijkt erop dat dit precies is wat ik nodig heb...

@ T-MOB: Ik ken deze constructie niet: $($value). Geef je daarmee aan dat je een variabele maakt van de string die is opgeslagen in $value? In dat geval zou dit ook erg handig kunnen zijn.

Ik ga er meteen mee bezig! (Eerste poging leek veelbelovend, alleen bevat $values slechts lege strings).

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
let op: niet met haakjes maar "{ }" (accolades heten ze geloof ik)!!

En ja, op die manier kun je variabele variabelen gebruiken. Is soms wel eens makkelijk, je code wordt er alleen niet altijd even overzichtelijk van.

[ Voor 9% gewijzigd door T-MOB op 26-02-2004 15:58 . Reden: duidelijkheid ]

Regeren is vooruitschuiven


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

T-MOB schreef op 26 februari 2004 @ 15:54:
let op: niet met haakjes maar "{ }" (accolades heten ze geloof ik)!!

En ja, op die manier kun je variabele variabelen gebruiken. Is soms wel eens makkelijk, je code wordt er alleen niet altijd even overzichtelijk van.
Soms wel eens 'makkelijk', maar NOOIT nodig.

[ Voor 9% gewijzigd door Bosmonster op 26-02-2004 16:01 ]


  • Edsger
  • Registratie: December 2000
  • Laatst online: 29-08 19:42
Verwijderd schreef op 26 februari 2004 @ 15:29:
@ Edsger: Eigenlijk is het code voor MySQL, lijkt mij. Maar hoe zou ik het dan wel kunnen doen?
Met een loopje dat array doorlopen en de string daarmee opbouwen.
Tip: gebruik dan wel de syntax:
$sql = "INSERT INTO $table SET col_name1 = '$value1', col_name2 = '$value2'";

die bouw je makkelijker op.

All your quantifications are belong to me!


  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Verwijderd schreef op 26 februari 2004 @ 15:50:
@ MatHack: Waarom is eval() ranzig? Het lijkt erop dat dit precies is wat ik nodig heb...
Zoek eens op eval & ranzig hier op GoT, kun je zien waarom sommigen vinden dat eval() ranzig is.
Bosmonster schreef op 26 februari 2004 @ 16:01:
[...]


Soms wel eens 'makkelijk', maar NOOIT nodig.
Soms zijn { nodig in PHP (met variabelen) hoor, zie http://www.php.net/manual/en/language.variables.variable.php laatste alinea ;)

[ Voor 35% gewijzigd door MatHack op 26-02-2004 16:15 ]

There's no place like 127.0.0.1


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Soms wel eens 'makkelijk', maar NOOIT nodig.
Ben ik met je eens, de TS heeft in dit geval echter zijn column_names opgeslagen in een array $TABLE[table][] en de waarden die ingevoerd moeten worden in de tabel opgeslagen in variabelen $"column_name".

Dan is de variabele variabele een snelle oplossing... Anders moet ie zijn hele script aanpassen. Ik neem aan dat hij niet aan het scripten is voor een schoonheidsprijs, soms moeten dingen gewoon "werken".

Regeren is vooruitschuiven


  • oscarvdb
  • Registratie: December 2001
  • Laatst online: 20-05 09:45

oscarvdb

and like that...

g00fy schreef op 26 februari 2004 @ 15:21:
velen zullen t ranzig vinden denk ik, maar :

PHP:
1
$query = "INSERT INTO tabel (waarde1, waarde2, waarde3) VALUES ('$waarde1', '$waarde2', '$waarde3')";


werkt perfect....
waarom niet dit:
PHP:
1
$query = "INSERT INTO tabel (waarde1, waarde2, waarde3) VALUES ('".$waarde1."', '".$waarde2."', '".$waarde3."')";

... he's gone.


Verwijderd

Topicstarter
Ik neem aan dat hij niet aan het scripten is voor een schoonheidsprijs, soms moeten dingen gewoon "werken".
Mooi gezegd! Ik ben al een halve dag aan het klooien met deze functies, en ik wil over anderhalf uur eten :Y)

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
'k zij nog zo
typevouten voorbehouden
in mijn stukkie code zat nl. typefoutje

PHP:
1
2
3
4
<?
reset ($TABLE[$table]);
while (list($key, $value) = each($TABLE[$table]))
?> 

Moet naturlijk zijn:
PHP:
1
2
reset ($TABLES[$table]);        // let op die 'S'
while (list($key, $value) = each($TABLES[$table]))       // let op die 'S'


Hoop dat je toch nog op tijd kunt eten ;)

Regeren is vooruitschuiven

Pagina: 1