[PHP & MySQL] - variabele kolomnaam

Pagina: 1
Acties:

  • steenz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 16:22
Ik probeer in PHP een MySQL database uit te lezen, waarbij de kolom die uitgelezen wordt in een variabele zit (die moet de user kunnen kiezen). Deze variabele heet $Veld. Normaal gesproken zou je de waarde van de kolom na bewerking opvragen via $rec_edit->kolomnaam, maar $rec_edit->$Veld pikt PHP niet...
code:
1
2
3
4
5
6
<?php 
$sql = "SELECT $Veld FROM tabelnaam"; 
$res_edit = mysql_query($sql) or die(mysql_error()); 
$rec_edit = mysql_fetch_object($res_edit); 
echo "<textarea name=edit rows=15 cols=75>$rec_edit->$Veld</textarea>"; 
?>

Weet iemand wat ik hier aan kan doen?

Thkz!

(ps... heb search gebruikt)

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Geen fetch_object gebruiken maar fetch_row :)

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
maar $rec_edit->$Veld pikt PHP niet...
logisch, het moet $rec_edit->Veld zijn, zonder $ voor Veld.

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op maandag 28 januari 2002 17:11 schreef marcusk het volgende:

[..]

logisch, het moet $rec_edit->Veld zijn, zonder $ voor Veld.
Lezen is ook een vak :P

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Variabele objecten spreek je als volgt aan:
PHP:
1
2
3
<?
$rec_edit->{$Veld};
?>

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Wat mogelijkheden:
  • * mysql_fetch_array gebruiken. [php]<? $sql = "SELECT $Veld FROM tabelnaam"; $res_edit = mysql_query($sql) or die(mysql_error()); $rec_edit = mysql_fetch_array($res_edit, MYSQL_ASSOC); echo "<textarea name=edit rows=15 cols=75>$rec_edit[$Veld]</textarea>"; ?>[/php] *[b]{ }[/b] om het [i]$rec_edit->$Veld[/i] kunnen zetten. *Je variabele niet direct binnen [b]" "[/b] aanroepen, dus [php]<? echo "<textarea name=edit rows=15 cols=75>" . $rec_edit->$Veld . "</textarea>"; ?>[/php] gebruiken.

  • steenz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 16:22
Bedankt RdeTuinman & freak007, dat is wat ik wilde weten. Ik ga het meteen proberen!




Oh, en marcusk, bedankt voor het goed lezen van m'n post en ook nog dank aan die overijverige mod die dit topic een paar minuten gesloten hield :D (no offense :))

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Nielsz:
Geen fetch_object gebruiken maar fetch_row :)
fetch_assoc
die heeft de beste "prijs/kwaliteit"-verhouding
(lees:"snelheid/functionaliteit"-verhouding)
freak007:
*{ } om het $rec_edit->$Veld kunnen zetten.
Dit is uberhaupt een hele goede stelregel, ook wanneer je arrays gebruikt:
PHP:
1
2
3
4
5
6
<?
// geeft problemen:
$str = "$array [ $veldnaam ] [ $veldnaam ] is een value uit een 2-dimensionale array";
// dit nooit:
$str = "{$array [ $veldnaam ] [ $veldnaam ]} is een value uit een 2-dimensionale array";
?>

Dus als je dat jezelf aanwent (desnoods ook voor gewonen variabelen) krijg je daar nooit* meer problemen mee.

*: zeg nooit nooit ...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op maandag 28 januari 2002 17:27 schreef drm het volgende:

[..]

fetch_assoc
die heeft de beste "prijs/kwaliteit"-verhouding
(lees:"snelheid/functionaliteit"-verhouding)
[..]
Serieus?
Hmmmmmz ik hoor een benchmark komen :)
En nu een echte, die ze ook allemaal vergelijkt :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Nielsz:
Serieus?
Hmmmmmz ik hoor een benchmark komen :)
En nu een echte, die ze ook allemaal vergelijkt :)
Pas al geweest. Die vergeleek ze allemaal. Daar bleek _row maar ietsjes (lees:200 milliseconden op de 10 000 aanroepen)sneller dan _assoc, terwijl assoc aanzienlijk makkelijker werkt.
_object en _array hebben verder geen toegevoegde functionaliteit maar waren toch een stuk langzamer.

Zoek maar even op, dat topic :D
Of maak zelf nog even een benchmark.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Op dinsdag 29 januari 2002 09:13 schreef drm het volgende:
Pas al geweest. Die vergeleek ze allemaal. Daar bleek _row maar ietsjes (lees:200 milliseconden op de 10 000 aanroepen)sneller dan _assoc, terwijl assoc aanzienlijk makkelijker werkt.
_object en _array hebben verder geen toegevoegde functionaliteit maar waren toch een stuk langzamer.
En wat nu als ik niet fetch_assoc doe, maar het volgende:
PHP:
1
2
3
<?
$result = mysql_fetch_array($queryResource, MYSQL_ASSOC);
?>

Die gebruik ik nl. altijd, omdat dit langer mogelijk is in php.

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op dinsdag 29 januari 2002 09:13 schreef drm het volgende:

[..]

Pas al geweest. Die vergeleek ze allemaal. Daar bleek _row maar ietsjes (lees:200 milliseconden op de 10 000 aanroepen)sneller dan _assoc, terwijl assoc aanzienlijk makkelijker werkt.
_object en _array hebben verder geen toegevoegde functionaliteit maar waren toch een stuk langzamer.

Zoek maar even op, dat topic :D
Of maak zelf nog even een benchmark.
Ik had er eentje gemaakt; maar dat ging niet helemaal goed :D
Eerst bleek fetch_array het snelst :+ en daarna crashde apache :+
Dat fetch_array het snelst was, komt door het feit dat ik geen tabel met 10.000 records heb, en daarom moest ik in het loopje steeds opnieuw die query uitvoeren :) Dat vondt hij niet fijn :) Hier mijn stukkie ranzige code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?
set_time_limit(100000);

require("includes/timer.class.inc.php");
$executiontime= new timer();
require("includes/config.inc.php");
require("includes/db.class.inc.php");
connect($mysqlInfo);

$aantal=2000;

$fetchrow=new timer();
  for($x=0; $x<=$aantal; $x++)
  {
    $result=mysql_query("select count(*) from ws_usersessions");
    $b=mysql_fetch_row($result);
  }
  echo round($fetchrow->stop(),6)." row<BR>";

$fetcharray=new timer();
  for($x=0; $x<=$aantal; $x++)
  {
    $result=mysql_query("select count(*) from ws_usersessions");
    $b=mysql_fetch_array($result);
  }
  echo round($fetcharray->stop(),6)." array<BR>";

$fetchobject=new timer();
  for($x=0; $x<=$aantal; $x++)
  {
    $result=mysql_query("select count(*) from ws_usersessions");
    $b=mysql_fetch_object($result);
  }
  echo round($fetchobject->stop(),6)." object<BR>";

$fetchassoc=new timer();
  for($x=0; $x<=$aantal; $x++)
  {
    $result=mysql_query("select count(*) from ws_usersessions");
    $b=mysql_fetch_assoc($result);
  }
  echo round($fetchassoc->stop(),6)." assoc<BR>";

echo "<br />total execution time: ".$executiontime->stop();


?>

:D

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Goh, het topic is weer open :)
Op maandag 28 januari 2002 17:12 schreef Nielsz het volgende:
Lezen is ook een vak :P
Ik snap nog steeds niet wat je hier mee bedoeld :) Kun je het uitleggen? :?

even een voorbeeld:
code:
1
2
$record->bla1 = 1;
print("record->bla1: $record->bla1");

^ dit werkt
code:
1
2
$record->bla1 = 1;
print("record->bla1: $record->$bla1");

^ dit werkt (uiteraard) niet.

[edit]
laat maar :) het gaat blijkbaar over variabele variabelen :)

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op dinsdag 29 januari 2002 17:13 schreef marcusk het volgende:

[edit]
laat maar :) het gaat blijkbaar over variabele variabelen :)
Lezen is ook een vak :P ;)

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op dinsdag 29 januari 2002 17:16 schreef Nielsz het volgende:
Lezen is ook een vak :P ;)
Hehe, idd :+
Pagina: 1