[php/mysql]WHERE met een variabele erin.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 20:39
Ik heb twee bestanden die ik wil koppelen. In de ene staat heel simpel een php-code om een database uit te lezen met een tabel om vinkjes te zetten. In de tweede wil ik een webpagina genereren met de inhoud van een row (of meerdere in het geval van meerdere vinkjes).

Wat werkt:
code:
1
2
3
4
5
$result = mysql_query("SELECT * FROM geneesmiddel WHERE geneesmiddel='bla' ORDER BY geneesmiddel ASC");
?>
<?php
while($row = mysql_fetch_array($result))
{

bla staat in de tabel geneesmiddel, waarin de rij geneesmiddel zit.

Wat werkt niet:
code:
1
2
3
4
5
$result = mysql_query("SELECT * FROM geneesmiddel WHERE geneesmiddel=$row['geneesmiddel'] ORDER BY geneesmiddel ASC");
?>
<?php
while($row = mysql_fetch_array($result))
{

Hierna komt een stukje echo waarin datzelfde $row['geneesmiddel'] terugkomt, welke goed weergegeven wordt. Waarom komt dit dan niet goed als ik dit zo doe? Ik kom er gewoon echt niet uit. Ik heb echt al een heleboel tutorials gelezen, maar ik kom hier gewoon niet uit. Vorige keer heb ik met deze vraag een mailtje gekregen van een mod dat ik zelf moet zoeken, maar het lukt me gewoon echt niet... Hopelijk dat nu iemand me het voor eens en voor altijd uit kan leggen (op beginnersniveau).

Acties:
  • 0 Henk 'm!

  • Oxiounking
  • Registratie: Oktober 2006
  • Niet online
PHP:
1
$result = mysql_query("SELECT * FROM geneesmiddel WHERE geneesmiddel={$row['geneesmiddel']} ORDER BY geneesmiddel ASC");


Staat gewoon in de PHP handleiding

EDIT: hier dus. Buiten de quotes halen werkt ook.

[ Voor 36% gewijzigd door Oxiounking op 01-02-2008 16:46 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Je moet met php een goede string opbouwen die een query oplevert. Een string beging met " en eindigt met ", of begint en eindigt met '. Je kan zelf strings concatten met variabelen:
PHP:
1
$str = "tekst " . $var . " tekst";
Php kent een (volgens sommigen smerig) truukje wanneer je dubbele quotes gebruikt:
PHP:
1
$str = "tekst $var tekst";
En die is identiek aan de bovenste. Dit gaat echter niet altijd op, zie de php handleiding hierover: http://php.net/string

Met bovenstaande in gedachte, formulier je php nu eens als volgt:
PHP:
1
2
3
4
5
$query = "SELECT enz";
$result = mysql_query( $query ) or die( mysql_error() );
while( $row = mysql_fetch_array( $result ) ){
   do_something();
}

Waar je namelijk dan achterkomt, is dat je de variabelen buiten quotes moet zetten, maar niet vergeten in je query single quotes moet hanteren voor je strings ;)

[ Voor 16% gewijzigd door mithras op 01-02-2008 17:20 ]


Acties:
  • 0 Henk 'm!

  • scarhand
  • Registratie: December 2001
  • Laatst online: 24-06-2021
PHP:
1
2
3
4
5
6
7
8
9
$result = mysql_query("SELECT
                           *
                       FROM
                           geneesmiddel
                       WHERE
                           geneesmiddel='" . $row['geneesmiddel'] . "'
                       ORDER BY
                           geneesmiddel
                       ASC");


Variabelen buiten de quotes zetten.

[ Voor 36% gewijzigd door scarhand op 01-02-2008 16:51 . Reden: accolades gesloopt ]


Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 20:39
Ik kreeg nu in eerste instantie niets te zien (ook geen foutmelding), dus heb ik "echo $result" toegevoegd, zodat ik zie wat de output is van $result. Dit geeft Resource ID #4 ipv. de output van de tabel. Hierdoor (door de while) zie ik dus helemaal niets. De vraag is nu alleen: waarom geeft ie als resultaat Resource Id #4 ipv. de output van de tabel?

En hoe kan ik dit voorkomen? De fout zit volgens mij nog steeds in de Where-clausule, aangezien alles werkt als ik deze er niet in zet...

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Je hebt een mysql error vanwege een foute query (je zet geen quotes om je variabele in de where clausule). mithras in "\[php/mysql]WHERE met een variabele erin." ;)

Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 20:39
volgens mij heb ik dat wel gedaan.
PHP:
1
2
3
4
5
6
7
8
9
<?php
include("../../../config.php");
$result = mysql_query("SELECT * FROM geneesmiddel WHERE geneesmiddel='" . $row['geneesmiddel'] . "'ORDER BY geneesmiddel ASC");
while($row = mysql_fetch_array($result))
{
echo $result;
}
mysql_close($connect);
?>

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Als je de post volgt dan krijg je ook een error als het niet goed is. En als het wel goed is, kan je met var_dump prima je recordset uitlezen.

Verder denk ik dat de while met dit niet heel veel uithaalt, dus zou ik zeker ook daar naar kijken. Maar nu komt het neer op simpel debug werk. Met trial&error, op strategische punten een dump plaatsen (query!!!! mysql error!!! recordset!!!) en logisch nadenken moet je dit toch echt voor elkaar krijgen ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Print je query eens gewoon op het scherm, want volgens mij zie ik zo al iets wat MySQL niet zo leuk vind (iets met een spatie).

En blijkbaar komt ie wel in de where-clause, anders zie je helemaal niks op het scherm...dus print daar eens je $row array: print_r($row); Is die leeg ( Array() ), dan is je query inderdaad fout :).

[ Voor 45% gewijzigd door Verwijderd op 01-02-2008 17:47 ]


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 01:02
Paultje3181 schreef op vrijdag 01 februari 2008 @ 17:34:
volgens mij heb ik dat wel gedaan.
PHP:
1
2
3
4
5
6
7
8
9
<?php
include("../../../config.php");
$result = mysql_query("SELECT * FROM geneesmiddel WHERE geneesmiddel='" . $row['geneesmiddel'] . "'ORDER BY geneesmiddel ASC");
while($row = mysql_fetch_array($result))
{
echo $result;
}
mysql_close($connect);
?>
Wordt $row['geneesmiddel'] in config.php gedefinieerd? Anders gaat dit natuurlijk niet werken.

In de TS zei je ook al iets van '$row['geneesmiddel'] wordt daaronder ook gebruikt'. Als je daarmee bedoelt binnen de while, dan kan ik misschien begrijpen waarom die mod zei dat je het zelf uit moest zoeken. Dan heb je namelijk de hele basis (opeenvolgende statements, variabelengebruik enz.) niet begrepen. In en na de while heeft $row een waarde, daarvoor niet, tenzij je die variabele in je config aanmaakt.

Als je error reporting laag hebt staan, krijg je geen error maar komt er in je query WHERE geneesmiddel=''. Dat levert waarschijnlijk nul rijen op en dus wordt de while nooit doorlopen, waardoor je geen output krijgt. $result is een resource, daarom krijg je iets van 'Resource id #n' te zien. Je moet bepaalde functies gebruiken om met een resource te werken (hier dus mysql_ functies). Zie verder php.net.

[ Voor 17% gewijzigd door Raynman op 01-02-2008 18:38 ]


Acties:
  • 0 Henk 'm!

  • rogierslag
  • Registratie: Maart 2005
  • Laatst online: 14-10-2024
PHP:
1
2
3
4
5
6
7
8
9
<?php 
include("../../../config.php"); 
$result = mysql_query("SELECT * FROM geneesmiddel WHERE geneesmiddel='" . $row['geneesmiddel'] . "' ORDER BY geneesmiddel ASC"); 
while($row = mysql_fetch_array($result)) 
{ 
echo $result; 
} 
mysql_close($connect); 
?>


code:
1
$row['geneesmiddel'] . "'ORDER
vervangen door
code:
1
$row['geneesmiddel'] . "' ORDER


Die spatie doet t m, want nu wordt de inhoud van $row['geneesmiddel'] gekoppeld aan ORDER. Stel dus dat geneesmiddel paracetemol is, dan wordt er paracetemolORDER BY geprint. paracetemolORDER geen probleem, maar waar moet MySQL die BY aan koppelen (GROUP BY, ORDER BY etc)

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 01:02
rogierslag schreef op vrijdag 01 februari 2008 @ 19:56:
Die spatie doet t m, want nu wordt de inhoud van $row['geneesmiddel'] gekoppeld aan ORDER. Stel dus dat geneesmiddel paracetemol is, dan wordt er paracetemolORDER BY geprint. paracetemolORDER geen probleem, maar waar moet MySQL die BY aan koppelen (GROUP BY, ORDER BY etc)
Na 'paracetemol' wordt door een aanhalingsteken de string waarop het veld geneesmiddel gematchet moet worden, beëindigd (en er wordt sowieso niks geprint). In principe is het dan mogelijk dat MySQL het snapt, maar of het echt werkt weet ik niet.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Paultje3181 schreef op vrijdag 01 februari 2008 @ 17:22:
Ik kreeg nu in eerste instantie niets te zien (ook geen foutmelding), dus heb ik "echo $result" toegevoegd, zodat ik zie wat de output is van $result. Dit geeft Resource ID #4 ipv. de output van de tabel. Hierdoor (door de while) zie ik dus helemaal niets. De vraag is nu alleen: waarom geeft ie als resultaat Resource Id #4 ipv. de output van de tabel?

En hoe kan ik dit voorkomen? De fout zit volgens mij nog steeds in de Where-clausule, aangezien alles werkt als ik deze er niet in zet...
Paultje3181 schreef op vrijdag 01 februari 2008 @ 17:34:
volgens mij heb ik dat wel gedaan.
PHP:
1
2
3
4
5
6
7
8
9
<?php
include("../../../config.php");
$result = mysql_query("SELECT * FROM geneesmiddel WHERE geneesmiddel='" . $row['geneesmiddel'] . "'ORDER BY geneesmiddel ASC");
while($row = mysql_fetch_array($result))
{
echo $result;
}
mysql_close($connect);
?>
Je echoo't $result en doet niet print_r($row);

Hm oh nu zie ik dat het antwoord hierboven ook wordt gegeven. Zie ook de opmerking van de spatie voor ORDER. Kijk anders ook eens een php/mysql-guide door over hoe het allemaal moet. Vrij basic php namelijk.

[ Voor 8% gewijzigd door krvabo op 02-02-2008 00:38 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.

Pagina: 1