Select * from db where
hallo
is het mogelijk om op meerdere tabelen te zoeken,
nu heb ik
$query = "SELECT * FROM `gebruikers` WHERE `refnr` = '".$_POST['ref']."'";
maar er zijn meerdere refnr van dezelfde persoon waar ik wil op zoeken.
is het mogelijk om op meerdere tabelen te zoeken,
nu heb ik
$query = "SELECT * FROM `gebruikers` WHERE `refnr` = '".$_POST['ref']."'";
maar er zijn meerdere refnr van dezelfde persoon waar ik wil op zoeken.
Allereerst horen backtricks niet thuis in query's, haal die dus weg.
En je kan op meerdere tabellen zoeken:
En nog wat fouten in de query van jou:
- * is een wildcard en je kan nooit alles nodig hebben. Een id bijv. heb je bijna nooit nodig, selecteer dus wat je wilt.
- Script is lek -> SQL injection. Gebruik mysql_real_escape_string
- Als $_POST['ref'] een cijfer is moet die niet tussen quotes.
En je kan op meerdere tabellen zoeken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$query = "
SELECT
rij1, rij2
FROM
gebruikers as g,
users as u
WHERE
g.refnr = 'iets'
OR
u.refnr = 'iets'
";
?>
$query = "
SELECT
rij1, rij2
FROM
gebruikers as g,
users as u
WHERE
g.refnr = 'iets'
OR
u.refnr = 'iets'
";
?>
En nog wat fouten in de query van jou:
- * is een wildcard en je kan nooit alles nodig hebben. Een id bijv. heb je bijna nooit nodig, selecteer dus wat je wilt.
- Script is lek -> SQL injection. Gebruik mysql_real_escape_string
- Als $_POST['ref'] een cijfer is moet die niet tussen quotes.
Even een reactie op de backticks:
Stel nou dat je de volgende query heb (los voorbeeld):
Dan geeft een error tenzij je het volgende gebruikt
Stel nou dat je de volgende query heb (los voorbeeld):
Dan geeft een error tenzij je het volgende gebruikt
Gewijzigd op 18/03/2011 10:34:16 door Barttje R
Gebruik geen backticks maar gewone quotes en vermijd verwarrende zaken zoals hierboven met group als alias en group als tabel. Laat de 2e AS ook maar weg!
SELECT
g.title AS 'Titel'
FROM
groups g
SELECT
g.title AS 'Titel'
FROM
groups g
Gewijzigd op 18/03/2011 10:43:43 door John D
Oké van die 2e AS wist ik nog niet dat je dat weg kon laten.
Volgens MySQL worden deze gewoon gebruikt...
http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
Ik zie geen punt om ze niet te gebruiken, het is toch ook een stukje "security"?
Wouter J op 18/03/2011 07:43:14:
Allereerst horen backtricks niet thuis in query's, haal die dus...
Volgens MySQL worden deze gewoon gebruikt...
http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
Ik zie geen punt om ze niet te gebruiken, het is toch ook een stukje "security"?
Gewijzigd op 18/03/2011 10:55:01 door Barttje R
de backticks horen niet bij SQL. MySQL misbruikt het om je de mogelijkheid te geven om gereserveerde woorden te gebruiken.
Zoals in mijn eerste post dus..?
Het is een los voorbeeld maar zulke dingen gebruik ik i.v.m me template, maar het is dus niet 'raar' als ik backticks gebruik om deze woorden...
Het is een los voorbeeld maar zulke dingen gebruik ik i.v.m me template, maar het is dus niet 'raar' als ik backticks gebruik om deze woorden...
Gewijzigd op 18/03/2011 11:09:12 door Barttje R
Gereserveerde woorden zijn niet voor niks gereserveerd. Die moet je gewoon niet gebruiken.
Volgens mij is er nog niet echt een antwoord gegeven op je vraag. Over de code van Wouter. Het gebruik van OR is dodelijk binnen SQL. Er is in de loop van de jaren wel wat verbeterd met de performance, maar je kan dan zelfs nog beter 2 query's uitvoeren in plaats van eentje met een OR.
De beveiligingslekken en slordigheden komen volgens mij wel erg vaak voor. Het is een beetje dweilen met de kraan open :D.
Maar Paul, hoe wil jij op meerdere tabellen zoeken. Je kunt bijv tabellen koppelen dmv het joinen. Je kunt ook UNION gebruiken:
http://dev.mysql.com/doc/refman/5.0/en/union.html
De beveiligingslekken en slordigheden komen volgens mij wel erg vaak voor. Het is een beetje dweilen met de kraan open :D.
Maar Paul, hoe wil jij op meerdere tabellen zoeken. Je kunt bijv tabellen koppelen dmv het joinen. Je kunt ook UNION gebruiken:
http://dev.mysql.com/doc/refman/5.0/en/union.html
Barman V op 18/03/2011 11:53:35:
Klinkklare onzin, broodje aap verhaal. Het kan voorkomen dat de engine er inderdaad intern 2 query's van maakt maar zelfs dat zal niet veel voorkomen en dus is het altijd sneller dan zelf twee query's te gaan zitten doen! Heb je een performance probleem op een OR ga dan maar eens kijken naar optimalisatie van je query en niet alles dubbel zitten processen en in PHP hele bakken data samenvoegen, doorlopen en weetikveel wat meer.Volgens mij is er nog niet echt een antwoord gegeven op je vraag. Over de code van Wouter. Het gebruik van OR is dodelijk binnen SQL. Er is in de loop van de jaren wel wat verbeterd met de performance, maar je kan dan zelfs nog beter 2 query's uitvoeren in plaats van eentje met een OR
Ik snap de vraag niet helemaal...
ik zou graag op meerdere velden willen zoeken
En hoe wat waar wil je die data dan allemaal uittrekken, wat zijn dan de onderlinge relaties tussen de tabellen enz enz.
Maar ik denk dat je je eerst maar eens moet bezinnen of het niet verstandiger is je verder te verdiepen in SQL, zodat je wel doel gerichte vragen hierover kan stellen
Maar ik denk dat je je eerst maar eens moet bezinnen of het niet verstandiger is je verder te verdiepen in SQL, zodat je wel doel gerichte vragen hierover kan stellen
SELECT ... WHERE veld1 = '$zoek' OR veld2 = '$zoek' OR veld3 = '$zoek'
En als het veld niet exact de waarde van $zoek heeft kan dit.
SELECT ... WHERE veld1 LIKE '%$zoek%' OR veld2 LIKE '%$zoek%' OR veld3 LIKE '%$zoek%'
En als het veld niet exact de waarde van $zoek heeft kan dit.
SELECT ... WHERE veld1 LIKE '%$zoek%' OR veld2 LIKE '%$zoek%' OR veld3 LIKE '%$zoek%'
Gewijzigd op 18/03/2011 18:13:56 door - SanThe -
- SanThe - op 18/03/2011 17:52:14:
En als het veld niet exact de waarde van $zoek heeft kan dit.
SELECT ... WHERE veld1 = '%$zoek%' OR veld2 = '%$zoek%' OR veld3 = '%$zoek%'
SELECT ... WHERE veld1 = '%$zoek%' OR veld2 = '%$zoek%' OR veld3 = '%$zoek%'
Pardon, wildcards bij een ordinaire vergelijking gaat niet werken!
http://www.w3schools.com/sql/sql_like.asp
Note: als je een LIKE niet nodig hebt moet je deze ook niet gebruiken, zoook moet je opletten hoe je je WHERE-clause opstelt
Gewijzigd op 18/03/2011 18:09:55 door Noppes Homeland
@Noppes: Helemaal gelijk. Ik ging duidelijk iets te snel. Verbeterd.




