Case incensitive
Ik heb dit staan:
Code (php)
1
2
3
4
2
3
4
<?
$SQL="select * from inkoopfactuurdetails where ";
$SQL=$SQL."productserienr = '".$snr."' or productserienr = '".$snr2."'";
?>
$SQL="select * from inkoopfactuurdetails where ";
$SQL=$SQL."productserienr = '".$snr."' or productserienr = '".$snr2."'";
?>
maar ook dit geprobeerd uit phpmyadmin wat werkt als ik daar zoek maar niet als ik het in mijn script doet
MySQL code is in hoofdletters!
Ook gehoord van beveiliging?
Code (php)
1
2
3
4
2
3
4
<?php
$SQL="SELECT * FROM inkoopfactuurdetails WHERE ";
$SQL=$SQL."productserienr = '".mysql_real_escape_string($snr)."' OR productserienr = '".mysql_real_escape_string($snr2)."'";
?>
$SQL="SELECT * FROM inkoopfactuurdetails WHERE ";
$SQL=$SQL."productserienr = '".mysql_real_escape_string($snr)."' OR productserienr = '".mysql_real_escape_string($snr2)."'";
?>
PS wel gehoord van beveiliging maar heb er niet zo veel verstand van, wat kan ik daaraan doen?
Dennis Ham op 06/08/2010 19:36:31:
mysql_real_escape_string haalt speciale karakters weg
Waar haal je dat vandaan?
SanThe Nvt op 06/08/2010 19:42:38:
Waar haal je dat vandaan?
Dennis Ham op 06/08/2010 19:36:31:
mysql_real_escape_string haalt speciale karakters weg
Waar haal je dat vandaan?
mysql_real_escape_string haalt quotes weg ( ' of " )
mysql_real_escape_string haalt niet speciale karakters weg, want dat zou je input slopen. Je wilt je input houden zoals je het krijgt. Het zorgt er dus alleen voor dat het wel in je database komt zonder dat je fouten in je queries krijgt (sql injections, of gewoon fouten).
Omdat je WHERE gebruikt, moet de data overeen komen. Als het goed is zou het met LIKE moeten willen. Zie docs, de query: SELECT 'a' LIKE 'A' levert 1 dus is gelijk.
Godver, lees. mysql_real_ESCAPE_string.
Als het weg zou halen dan zou het wel mysql_remove_shit zijn.
En bovendien escapte het ook nog andere karakters die mogelijk ongeldige queries kunnen opleveren.
Omdat je WHERE gebruikt, moet de data overeen komen. Als het goed is zou het met LIKE moeten willen. Zie docs, de query: SELECT 'a' LIKE 'A' levert 1 dus is gelijk.
Raoul Blabla op 06/08/2010 19:46:01:
mysql_real_escape_string haalt quotes weg ( ' of " )
SanThe Nvt op 06/08/2010 19:42:38:
Waar haal je dat vandaan?
Dennis Ham op 06/08/2010 19:36:31:
mysql_real_escape_string haalt speciale karakters weg
Waar haal je dat vandaan?
mysql_real_escape_string haalt quotes weg ( ' of " )
Godver, lees. mysql_real_ESCAPE_string.
Als het weg zou halen dan zou het wel mysql_remove_shit zijn.
En bovendien escapte het ook nog andere karakters die mogelijk ongeldige queries kunnen opleveren.
Ik heb nu dit staan:
Code (php)
1
2
3
2
3
<?
$SQL=$SQL."productserienr LIKE '".mysql_real_escape_string($snr)."' OR productserienr LIKE '".mysql_real_escape_string($snr2)."'";
?>
$SQL=$SQL."productserienr LIKE '".mysql_real_escape_string($snr)."' OR productserienr LIKE '".mysql_real_escape_string($snr2)."'";
?>
als ik zoek op 'S1AFJ90Z100826' lukt het maar verander ik de eerste letter in een kleine letter bv 's1AFJ90Z100826' dan krijg ik geen resultaat.
Raoul Blabla op 06/08/2010 19:27:08:
MySQL code is in hoofdletters!
Je reinste onzin, je mag het door elkaar gebruiken. Waar komt die onzin toch steeds weer vandaan ? Dat het wellicht nettter staat is een keuze maar het het hoeft niet. Laatst riep iemand dat een equi join ook niet meer mocht en dat een inner join sneller is, ook een broodje aap.
Voor wat betreft het probleem is de simpelste oplossing om tijdens de zoekactie even te Upper Casen: where upper(productserienr) = upper('s1afJ90Z100826'). Overigens is dat dan wel weer een dure (trage) zoekactie omdat je door deze syntax geen index-pad krijgt. Meestal heb je daar met kleine mysql databeesjes geen last van. Om toch via een index te zoeken heb je een functional index nodig en ik weet niet of mysql dat ondersteunt. create index op de upper(veldnaam) om het even eenvoudig te zeggen.
Eventueel gewoon alle productserienrs in upper case opslaan en daar een index op bouwen bespaart je de functie: where upper(productserienr) en kan je gewoon doen where productserienr = upper($snr)
Bij de insert dus la werken met upper($snr)
Gewijzigd op 06/08/2010 20:14:20 door Aad B
PS of de MySqL code groot of klein is maakt mij niet zo veel uit als het maar werkt :P
SELECT * FROM inkoopfactuurdetails WHERE upper(productserienr) = upper($snr);
Dan wordt tijdens de zoekactie even ge-upper-cased terwijl je resultaat gewoon blijft zoals je het ingevoerd hebt. Alle letters worden alleen tijdens het zoeken upper case vergeleken!
Fatal error: Call to undefined function upper() in *** on line 40
ik heb dit staan:
Code (php)
1
2
3
2
3
<?
$SQL=$SQL."upper(productserienr) = '".upper($snr)."' OR productserienr = '".upper($snr2)."'";
?>
$SQL=$SQL."upper(productserienr) = '".upper($snr)."' OR productserienr = '".upper($snr2)."'";
?>
Gewijzigd op 06/08/2010 20:28:31 door Dennis Ham
UPPER is een mysql functie.
Code (php)
1
2
3
2
3
<?
$SQL=$SQL."upper(productserienr) = upper($snr) OR productserienr = upper($snr2)";
?>
$SQL=$SQL."upper(productserienr) = upper($snr) OR productserienr = upper($snr2)";
?>
krijg ik deze foutmelding
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/*** on line 42
Edit:
@Dennis: het is kwestie van syntax, de juiste quootjes op de juiste plaats. De truc met de MySQL upper functie is namelijk wel je oplossing.
@Dennis: het is kwestie van syntax, de juiste quootjes op de juiste plaats. De truc met de MySQL upper functie is namelijk wel je oplossing.
Gewijzigd op 06/08/2010 20:34:03 door Aad B
Aad B op 06/08/2010 20:31:52:
De tweede en de derde upper moeten in quotes om bij MySQL aan te komen. Nu denkt php dat het er iets mee moet doen. Het zijn zoals Karl zegt: MySQL functies.
Hiervoor is het dus beter als je gewoon SQL in uppercase schrijft ;-)
@Dennis: Bouw eens foutafhandeling in.
Code (php)
1
2
3
2
3
<?
$SQL=$SQL."UPPER(productserienr) = UPPER('$snr') OR productserienr = UPPER('$snr2')";
?>
$SQL=$SQL."UPPER(productserienr) = UPPER('$snr') OR productserienr = UPPER('$snr2')";
?>
strtoupper ook geprobeerd wat wel een foutmelding geeft :S
Code (php)
1
2
3
4
2
3
4
<?
$SQL="select * from inkoopfactuurdetails where ";
$SQL=$SQL."upper(productserienr) = upper('".$snr."') or upper(productserienr) = upper('".$snr2."')";
?>
$SQL="select * from inkoopfactuurdetails where ";
$SQL=$SQL."upper(productserienr) = upper('".$snr."') or upper(productserienr) = upper('".$snr2."')";
?>
Gewijzigd op 06/08/2010 20:45:49 door Aad B
Code (php)
1
2
3
2
3
<?
$SQL=$SQL."UPPER(productserienr) = UPPER('".$snr."') OR UPPER(productserienr) = UPPER('".$snr2."')";
?>
$SQL=$SQL."UPPER(productserienr) = UPPER('".$snr."') OR UPPER(productserienr) = UPPER('".$snr2."')";
?>
Zo zijn se blauw maar krijg nog steeds resultaat alleen als ik het exact het zelfde laat zoeken
Gewijzigd op 06/08/2010 20:47:04 door Dennis Ham
Er moet nog een upper op de tweede, na de or maar of dat nu je probleem oplost vraag ik me af. De SQL is nu goed en het zou moeten werken. Voeg eens MySQL foutafhandeling toe.
Hoe doe ik de foutafhandeling?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
mysql> select emailadres from klant_order where upper(emailadres)=upper('[email protected]');
+--------------+
| emailadres |
+--------------+
| [email protected] |
+--------------+
1 row in set (0.00 sec)
+--------------+
| emailadres |
+--------------+
| [email protected] |
+--------------+
1 row in set (0.00 sec)
Foutafhandeling
Code (php)
Gewijzigd op 06/08/2010 20:57:50 door Aad B