[php] zoekfunctie met meerdere variabelen, simpelere versie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • walletje-w
  • Registratie: November 2007
  • Laatst online: 18-09 20:57
Voor school moeten we een programma schrijven voor een makelaardij die huizen verkoopt en waar mensen hun huizen op te koop kunnen aanbieden. Dit programma hebben we in html en php geschreven met als database mysql. Eerst hebben we de database gemaakt via infagon 5,0 en die vervolgens in xamp gezet.

Alles gaat redelijk goed maar nu hebben we een probleem. We hebben namelijk een zoekfunctie nodig (stond bij de vereiste) maar we komen er niet uit.

We hebben een pagina waar ingelogde mensen kunnen zoeken op 5 verschillende dingen. Eerst hebben we gekeken of de zoekfunctie werkt met alleen het eerste onderdeel. Dat werkte alleen toen hebben we die andere 4 er ook bij gehaald en nu werkt het niet meer.

Toen we het de eerste keer probeerde was de code wel heel anders als nu. We hebben nu van alles geprobeerd.

Nu hebben we:
PHP: filename
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
48
49
50
51
52
53
54
55
56
57
58
59
60
$mysql = mysql_connect('localhost','root');
mysql_select_db('database_makelaar');
$verkoopnummer= $_POST ["opdrachtnummer"];
$type_woning=$_POST["woning_type"];
$postcode=$_POST["postcode"];
$straat=$_POST["straat"];
$huisnummer=$_POST["nummer"];


if(empty($verkoopnummer))
 {
 $verkoopnummer='*';
 }
if (empty($typer_woning))
 {
$type_woning='*';
 }
if (empty($postcode))
 {
 $postcode='*';
 }
if (empty($straat))
 {
 $straat='*';
 }
if (empty($huisnummer))
 {
 $huisnummer='*';
 }

$resultaat1 = mysql_query("SELECT * FROM adresnummer_1 
WHERE adresnummer_2 = '$verkoopnummer' AND
type_woning_1 = '$type_woning' AND 
postcode_1 = '$postcode' AND 
straatnaam_2 = '$straat' AND 
huisnummer_2 = '$huisnummer'",$mysql) 
or die ("De query op de database is mislukt!");

?>

<table summary=""border="1""
<tr>

<td width="90px">type woning</td>
<td width="65px">postcode</td>
<td width="150px">straat</td>
<td width="90px">huisnummer</td>
<td width="75px">vraagprijs</td>
</tr>

</table>

<?php
    while(list($verkoopnummer,$postcode,$straat,$huisnummer,$type_woning, 
$makelaardij,$vraagprijs, $klantnummer) = mysql_fetch_row($resultaat1))
    {
    print("<table border=1><tr><td width='90'> $type_woning</td><td width='65'> 
$postcode</td><td width='150'> $straat</td><td width='90'> $huisnummer</td>
<td width='75'> $vraagprijs</td></tr></table>");
    }

Er zijn 2 tabellen omdat het anders niet in de lay-out paste.

We vermoeden dat dit niet werkt doordat sterretje iets moet aangeven dat alles geselecteerd mag worden. In access heb je bijvoorbeeld % aangeeft dat dat van alles kan wezen.

Ik ben erg benieuwd of iemand weet wat het probleem is en of er een makkelijkere manier bestaat om zoiets te doen. We zijn nu net een ruime week bezig met php,mysql en access dus we zijn nog behoorlijke beginners. Ook hebben we al gezocht op zoekfunctie in php dat leverde een aantal resultaten op maar daar begrepen we niets van, iets met Join left, right, all.

Vriendelijke groeten, Bram en Wouter.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Een sterretje is een wildcard en in de vergelijkingscontext met een = operator wordt die helemaal niet als wildcard gebruikt; sowieso gebruikt SQL geen * als wildcard maar een %. Vervolgens kun je die alleen maar gebruiken met LIKE als operator, niet met =.

Daarnaast: lees je eens in over SQL-injectie, en lay-out met tabellen regelen is natuurlijk ook niet netjes. Zie de diverse table vs. div-discussies in Webdesign, Markup & Clientside Scripting.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Foamy
  • Registratie: November 2006
  • Laatst online: 19-09 08:49

Foamy

Fulltime prutser

Wat heb je zelf al gezocht (en eventueel gevonden)? Een simpele Google opdracht geeft bijvoorbeeld al:

http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

blub


Acties:
  • 0 Henk 'm!

  • walletje-w
  • Registratie: November 2007
  • Laatst online: 18-09 20:57
Nou het is gelukt hoor ! Heel erg bedankt !
Hier was de oplossing:
PHP: filename
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
$mysql = mysql_connect('localhost','root');
mysql_select_db('database_makelaar');
$verkoopnummer= $_POST ["opdrachtnummer"];
$type_woning=$_POST["woning_type"];
$postcode=$_POST["postcode"];
$straat=$_POST["straat"];
$huisnummer=$_POST["nummer"];


if(empty($verkoopnummer))
 {
 $verkoopnummer='%';
 }
if (empty($typer_woning))
 {
$type_woning='%';
 }
if (empty($postcode))
 {
 $postcode='%';
 }
if (empty($straat))
 {
 $straat='%';
 }
if (empty($huisnummer))
 {
 $huisnummer='%';
 }


$resultaat1 = mysql_query("SELECT * FROM adresnummer_1 
WHERE adresnummer_2 LIKE '$verkoopnummer' AND
type_woning_1 LIKE '$type_woning' AND 
postcode_1 LIKE '$postcode' AND 
straatnaam_2 LIKE '$straat' AND 
huisnummer_2 LIKE '$huisnummer'",$mysql) 
or die ("De query op de database is mislukt!");




?>

<table summary=""border="1""
<tr>

<td width="90px">type woning</td>
<td width="65px">postcode</td>
<td width="150px">straat</td>
<td width="90px">huisnummer</td>
<td width="75px">vraagprijs</td>
</tr></table>

<?php
    while(list($verkoopnummer,$postcode,$straat,$huisnummer,$type_woning, $makelaardij,$vraagprijs, $klantnummer) = mysql_fetch_row($resultaat1))
    {
    print("<table border=1><tr><td width='90'> $type_woning</td><td width='65'> $postcode</td><td width='150'> $straat</td><td width='90'> $huisnummer</td><td width='75'> $vraagprijs</td></tr></table>");
    }
    
}


Vooral op tweakers gezocht omdat we het nederlands wat beter beheersen dan het engels. En we nog niet verdiept zitten in die materie O-)

We weten dat het niet netjes is om in tabellen te werken, maar nu was het de makkelijkste manier. Maar de volgende keer zullen we daarop letten. Ook moeten we ons nog maar eens verdiepen in SQL injection maar dat was bij deze opdracht niet van toepassing en we hebben in totaal maar 3 weken gehad voor dit project. Zonder enige uitleg over php of mysql dus opzich zijn we al best tevreden :o

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

SQL-injectie tegengaan kan al effectief met één functieaanroep. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Taenadar
  • Registratie: Januari 2004
  • Laatst online: 16:31
Aangezien het voor een school opdracht is het niet echt nuttig is om alles te beveiligen. Er over lezen daarentegen is wel zeer leerzaam en je kan het eventueel gebruiken voor een volgend project/opdracht.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Taenadar schreef op vrijdag 22 januari 2010 @ 19:02:
Aangezien het voor een school opdracht is het niet echt nuttig is om alles te beveiligen.
Daar ben ik het niet mee eens. Sure, voor de opdracht zal 't wel niet boeien, maar wil je jezelf bekwamen in dit vak dan zorg je dat je, zodra je best practices oppikt, je deze diep in je gewoontes nestelt. Het beschermen tegen SQL injection leer je misschien niet op school maar zodra je er mee geconfronteerd wordt dien je je een hartverzakking te schrikken om vervolgens een diepgaande drang diep in jezelf te wortelen om het je nooit meer te laten overkomen. (En sure, as always, iedereen laat wel eens een steekje vallen. Point being dat je gewoon gewoonte moet maken hier bij stil te staan en er naar te handelen. Time and again).

Wordt er onverschillig gereageerd op zaken als deze dan moet je heeeeul vlug een ander vak gaan leren.

[ Voor 5% gewijzigd door RobIII op 22-01-2010 19:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 12-09 13:07
Met ^^

Zelfde geld ook voor commentaar ben ik van mening :)

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 01:04
Als je aan het begin toch allemaal variabelen uit $_POST gaat zitten kopiëren, kun je daar toch ook makkelijk even die ene functieaanroep bij zetten (en het zou toch jammer zijn als iemand, bijv. n.a.v. dit topic, een geintje gaat uithalen).
Andere tips: variabelen niet tussen aanhalingstekens zetten, script leesbaar houden door inspringing e.d., en i.p.v. SELECT * expliciet de velden noemen, zeker als je die list(...) = mysql_fetch_row(...) constructie gebruikt (zie als alternatief bijv. mysql_fetch_assoc).

Verder lijkt mij het gebruik van een tabel hier zeker niet fout, maar je hebt nu de table header in een tabel en dan de body in een andere, dat is wel raar (ik begrijp je opmerking daarover ook niet).

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:20

MueR

Admin Tweakers Discord

is niet lief

Waarom geef je per definitie alles mee in je sql query? Als ik in een database moet zoeken op huisnummer, zoek ik op huisnummer, niet op straat+huisnummer+postcode+woonplaats.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Het argument dat het voor een opdracht niet uitmaakt om iets wel of niet te doen is redelijk loos. Programmeren leer je niet op school, ook niet op het HBO of zelfs op de universiteit. Wat je daar leert is de manier om jezelf dingen eigen te maken die te maken hebben met je vakgebied. Een programmeur moet in de allereerste plaats zichzelf onderwijzen en up to date blijven. Typisch heeft een programmeur ook een bepaalde voorliefde voor het vakgebied en vaker wel dan niet wordt er in de vrije tijd ook geprogrammeerd.

Programmeurs worden ook niet geschoold, programmeurs worden geboren. Geboren met een bepaalde kronkel in hun hersenen welteverstaan, waarmee ze op een bepaalde manier tegen problemen aan kijken.
MueR schreef op vrijdag 22 januari 2010 @ 19:55:
Waarom geef je per definitie alles mee in je sql query? Als ik in een database moet zoeken op huisnummer, zoek ik op huisnummer, niet op straat+huisnummer+postcode+woonplaats.
In die like-opzet maakt dat niet gek veel uit; WHERE veld LIKE '%' geeft gewoon alle records terug. Een fatsoenlijk DBMS zal dat intern vast ook wel optimaliseren door te herkennen dat alle records behalve die met een NULL-waarde daaraan voldoen en dus niet op recordniveau strings gaan vergelijken, maar of MySQL daaronder valt weet ik niet. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dat van die NULL-waardes is natuurlijk wel een belangrijk iets: zo kan je nooit iets met een NULL-waarde terugvinden, en dat wil je eigenlijk niet... Daarnaast is er nu een herhalend patroon met "if (empty)". Het lijkt me mooier om een eenvoudig query-builder te hebben die dat afhandelt. Ik denk dus aan iets als:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function addCondition($preCondition, $field, $like) {
    if (empty($like))
        return $preCondition;
    $like = mysql_real_escape_string($like);
    if (empty($preCondition))
        return " WHERE `$field` LIKE '$like'";
    else
        return "$preCondition AND `$field` LIKE '$like'";
}

$where = addCondition("", "opdrachtnummer", $_POST["opdrachtnummer"]);
$where = addCondition($where, "woning_type", $_POST["woning_type"]);

Dat voorkomt ook nog typefouten (zeg $typer_woning). Het lijkt me trouwens ook handig om overal gewoon dezelfde namen te hebben, liefst zonder dingen als "_1".

Daarnaast lijkt het me netjes om overal een karakterset te specifiëren (charset) en ook htmlspecialchars te gebruiken. Je zal maar een prijs willen hebben als "<100k" of bijzondere tekens willen gebruiken. :)

Er lijkt trouwens ook iets mis te gaan bij
<table summary=""border="1"" en het lijkt me niet dat je per regel een nieuwe tabel nodig hebt.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • walletje-w
  • Registratie: November 2007
  • Laatst online: 18-09 20:57
NMe schreef op vrijdag 22 januari 2010 @ 18:57:
SQL-injectie tegengaan kan al effectief met één functieaanroep. ;)
Bedankt! Dit is inderdaad niet zoveel werk. (trouwens de website word niet op internet geplaats, Alleen lokaal gedraait.)

@roblll Hier ben ik het wel mee eens maar door het aantal uren dat we er nu al ingestopt hebben (we moesten het vandaag inleveren, maar dat is gewoon onmogelijk :+ ) hebben we besloten om enkel het benodigde te doen. Dus eerst maar eens kijken of we precies aan de voorwaarden voldoen. Als er gewoon ruimte was om dingen uit te zoeken zouden we dat met alle plezier gedaan hebben. Ook was het afgelopen week toetsweek, kortom heerlijke planning. :z

@raynman
Verder lijkt mij het gebruik van een tabel hier zeker niet fout, maar je hebt nu de table header in een tabel en dan de body in een andere, dat is wel raar (ik begrijp je opmerking daarover ook niet).
Sorry nu snap ik jou niet meer. Volgens mij klopt het nu gewoon?
En bedankt voor de tips!, toegepast!
MueR schreef op vrijdag 22 januari 2010 @ 19:55:
Waarom geef je per definitie alles mee in je sql query? Als ik in een database moet zoeken op huisnummer, zoek ik op huisnummer, niet op straat+huisnummer+postcode+woonplaats.
Omdat je anders de rest van de gegevens er niet bij geleverd krijgt, toch? Want je wilt bijvoorbeeld alleen op postcode 3454RT zoeken en dat dan ook de rest van de gegevens erbij gezocht worden.

@NMe Mijn excuses maar ik ben bang dat ik een ontwerper ga worden voor koffiekopjes, muizen, geluidsboxen en usb-sticks :9

en dit:
Typisch heeft een programmeur ook een bepaalde voorliefde voor het vakgebied en vaker niet dan wel wordt er in de vrije tijd ook geprogrammeerd.
Bedoel je waarschijnlijk net andersom? Want dat is nu in ieder geval wel zo bij ons.

@pedorus
PHP: filename
1
2
3
4
5
6
7
8
9
10
11
12
function addCondition($preCondition, $field, $like) {
    if (empty($like))
        return $preCondition;
    $like = mysql_real_escape_string($like);
    if (empty($preCondition))
        return " WHERE `$field` LIKE '$like'";
    else
        return "$preCondition AND `$field` LIKE '$like'";
}

$where = addCondition("", "opdrachtnummer", $_POST["opdrachtnummer"]);
$where = addCondition($where, "woning_type", $_POST["woning_type"]);
Er lijkt trouwens ook iets mis te gaan bij
<table summary=""border="1"" en het lijkt me niet dat je per regel een nieuwe tabel nodig hebt.
Verbeterd.

Mijn excuses, maar dit begrijp ik nog niet. Zou het eventueel uitgelegd kunnen worden?
Goed weekend!

[ Voor 3% gewijzigd door walletje-w op 22-01-2010 21:44 ]


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

walletje-w schreef op vrijdag 22 januari 2010 @ 18:51:
We weten dat het niet netjes is om in tabellen te werken, maar nu was het de makkelijkste manier. Maar de volgende keer zullen we daarop letten.
Zie ik het verkeerd, of is het juist wél tabulaire data? Een tabel is imo hier perfect voor geschikt, een list is het sowieso niet, aangezien je per huis ook enkele eigenschappen (adres, afstand tot (winkel)centrum , voorzieningen e.d. wil weergeven.

Wat er bedoeld word is iets als dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
echo '<table>';
echo '<tr><th>Eerste heading</th><th>Tweede heading</th><th>Derde heading</th><th>Vierde heading</th></tr>';
while($row = mysql_fetch_array($resulset))
{
    echo '<tr>';
    echo '<td>Blablablajeresultsetdoor</td>';
    echo '<td>Blablablajeresultsetdoor</td>';
    echo '<td>Blablablajeresultsetdoor</td>';
    echo '<td>Blablablajeresultsetdoor</td>';
    echo '</tr>';
}
echo '</table>';
Dan maak je 1 tabel, met een overzicht van álle huizen die terugkomen uit je resultset. Summary is trouwens geen attribuut voor de HTML-tag table. :)

[ Voor 38% gewijzigd door CH4OS op 22-01-2010 21:55 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
walletje-w schreef op vrijdag 22 januari 2010 @ 21:42:
Omdat je anders de rest van de gegevens er niet bij geleverd krijgt, toch? Want je wilt bijvoorbeeld alleen op postcode 3454RT zoeken en dat dan ook de rest van de gegevens erbij gezocht worden.
Nou, het is duidelijk dat je het hoofdstuk over databases een beetje verkeerd begrepen hebt. Zoek eens uit hoe een query opgebouwd wordt zou ik zeggen ;)

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
walletje-w schreef op vrijdag 22 januari 2010 @ 21:42:
Mijn excuses, maar dit begrijp ik nog niet. Zou het eventueel uitgelegd kunnen worden?
Alles kan uitgelegd worden, maar het is nog handiger als duidelijk is wat er uitgelegd moet worden. :p
Wat je eigenlijk zou willen is dat je niet altijd dezelfde query-opbouw hebt. Als je alleen op huisnummer wil zoeken, wil je dus eigenlijk iets als:
SQL:
1
2
3
4
SELECT verkoopnummer, postcode, straat, huisnummer,
    type_woning, makelaardij,vraagprijs, klantnummer 
FROM adresnummer_1 
WHERE huisnummer LIKE '$huisnummer'

Waar niet allerlei onnodige LIKE '%' er nog bij zitten. Ik heb * hier expres even uitgeschreven, omdat 'select *' niet heel mooi is (als de database wijzigt, doet je code opeens iets anders). Waarschijnlijk zijn de veldnamen in werkelijkheid iets anders.

Als je helemaal geen condities hebt, dan kan die where helemaal weg. Als er meerdere condities zijn, dan moeten ze met AND aan elkaar gekoppeld worden. De functie die ik heb gegeven voegt telkens iets toe aan dat where-gedeelte, maar alleen als het toe te voegen veld niet-leeg is (regel 2 en 3). Ook wordt automatisch voor escaping gezorgd (regel 4). Daarnaast wordt er rekening mee gehouden dat de eerste toevoeging anders is dan de latere toevoegingen (regel 5). Het idee is dat je de uitkomst van de laatste aanroep van die functie dan kan gebruiken in mysql_query (of om te testen kan echo'en). Wat een functie precies is, en waarom functies belangrijk zijn, dat leer je als het goed is in een willekeurige uitleg voor beginners over php. Het lijkt me in ieder geval niet handig om iets dat je niet begrijpt in je programma te zetten. ;)

Overigens zou een meer professioneel iemand waarschijnlijk een query-builder gebruiken zoals Zend_Db_Select. Maar daar zou ik pas veel later naar gaan kijken. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:20

MueR

Admin Tweakers Discord

is niet lief

walletje-w schreef op vrijdag 22 januari 2010 @ 21:42:
Omdat je anders de rest van de gegevens er niet bij geleverd krijgt, toch? Want je wilt bijvoorbeeld alleen op postcode 3454RT zoeken en dat dan ook de rest van de gegevens erbij gezocht worden.
Als ik alleen op postcode 3454RT wil zoeken en ik zoek alleen op postcode 3454RT, waarom zou ik dan geen huisnummer terug krijgen? Daar volg ik je niet. Het gaat niet om het ophalen van de complete rij data maar om de manier waarop je ze opzoekt.

Wat is het wezenlijke verschil tussen:
SQL:
1
2
3
SELECT straatnaam, huisnr, postcode
FROM adressen
WHERE postcode = '3454RT'

En
SQL:
1
2
3
4
5
SELECT straatnaam, huisnr, postcode
FROM adressen
WHERE postcode = '3454RT' 
  AND huisnummer LIKE '%'
  AND straatnaam LIKE '%'

wanneer een LIKE '%' zich vertaalt naar "het boeit me niet wat er in staat" ? Bij beide queries krijg ik straatnaam, huisnr en postcode van de huizen met postcode 3454RT terug namelijk, alleen bespaar ik mijn database een aantal argumenten parsen die er toch niet toe doen.
pedorus schreef op vrijdag 22 januari 2010 @ 22:38:
Overigens zou een meer professioneel iemand waarschijnlijk een query-builder gebruiken zoals Zend_Db_Select. Maar daar zou ik pas veel later naar gaan kijken. :)
Ehm, nee? Dat is jouw persoonlijke voorkeur. Ik schrijf mijn queries liever zelf.

[ Voor 16% gewijzigd door MueR op 22-01-2010 23:17 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Misschien is het handig voor Walletje-W om anders een query eens te vertalen naar wat het doet.
Die eerste van MueR bijvoorbeeld: Selecteer straatnaam, huisnummer en postcode, van (tabel) adressen, waar postcode gelijk is aan 3454RT.
pedorus schreef op vrijdag 22 januari 2010 @ 22:38:
Overigens zou een meer professioneel iemand waarschijnlijk een query-builder gebruiken zoals Zend_Db_Select. Maar daar zou ik pas veel later naar gaan kijken. :)
Dat is inderdaad zoals MueR zegt persoonlijke voorkeur. Een DBAL (database abstraction layer) is leuk, maar het geeft (in mijn ogen) teveel overhead om rendabel te zijn waardoor je dus performance inleverd.

[ Voor 54% gewijzigd door CH4OS op 22-01-2010 23:59 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

MueR schreef op vrijdag 22 januari 2010 @ 23:13:
[...]

Wat is het wezenlijke verschil tussen:
SQL:
1
2
3
SELECT straatnaam, huisnr, postcode
FROM adressen
WHERE postcode = '3454RT'

En
SQL:
1
2
3
4
5
SELECT straatnaam, huisnr, postcode
FROM adressen
WHERE postcode = '3454RT' 
  AND huisnummer LIKE '%'
  AND straatnaam LIKE '%'

wanneer een LIKE '%' zich vertaalt naar "het boeit me niet wat er in staat" ? Bij beide queries krijg ik straatnaam, huisnr en postcode van de huizen met postcode 3454RT terug namelijk, alleen bespaar ik mijn database een aantal argumenten parsen die er toch niet toe doen.
Nou, zoals ik al zei krijg je met de laatste query geen records terug waarin huisnummer of straatnaam NULL zijn. Niet echt handig. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:20

MueR

Admin Tweakers Discord

is niet lief

Als jij een database met woningen in de verkoop hebt waar straatnaam of huisnummer NULL mag zijn heb je een ander probleem :+

[ Voor 5% gewijzigd door MueR op 23-01-2010 00:02 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op vrijdag 22 januari 2010 @ 20:16:
Programmeurs worden ook niet geschoold, programmeurs worden geboren. Geboren met een bepaalde kronkel in hun hersenen welteverstaan, waarmee ze op een bepaalde manier tegen problemen aan kijken.

:Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik wijs flaws in de query aan wat betreft bepaalde cases. Of het al dan niet van toepassing is voor de situatie van de topicstarter mag 'ie zelf bepalen. :D

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
MueR schreef op vrijdag 22 januari 2010 @ 23:13:
Ehm, nee? Dat is jouw persoonlijke voorkeur. Ik schrijf mijn queries liever zelf.
Dit was een vermoeden ('waarschijnlijk'). Ik heb zelf nog nooit met zend_db gewerkt; de PHP-projectjes die ik heb gedaan waren ook niet echt groot genoeg om hiernaar te gaan kijken. Ik zal mijn vermoeden bijstellen. :)
MueR schreef op zaterdag 23 januari 2010 @ 00:02:
Als jij een database met woningen in de verkoop hebt waar straatnaam of huisnummer NULL mag zijn heb je een ander probleem :+
Misschien een nieuwbouwwoning? ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1