Ik wil een zoekopdracht uitvoeren die zoekt op kleine en hoofdletters en nummers gemengd door elkaar heen. Bv. als je 'z1AfJ90z100826' of 'a1AfJ90Z100826' als zoekopdracht verzend en in de de database staat 'S1AfJ90Z100826' dan krijg ik geen resultaat maar alleen als ik op 'S1AfJ90Z100826' zoek

Ik heb dit staan:
<?
$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

<?
$SQL = 'SELECT * FROM `inkoopfactuurdetails` WHERE `productserienr` LIKE CONVERT(_utf8 '".$snr."' USING latin1) COLLATE latin1_swedish_ci';

?>
UPPER is een mysql functie.
En als ik dit doe:
<?
$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
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.

[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.
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.
Dit gedaan maar krijg nog steeds geen goed resultaat, maar geen foutmelding meer
<?
$SQL=$SQL."UPPER(productserienr) = UPPER('$snr') OR productserienr = UPPER('$snr2')";
?>

strtoupper ook geprobeerd wat wel een foutmelding geeft :S
$snr en $snr2 moeten buiten de quotes komen, moeten dus blauw kleuren zoals in je eerste post en dan werkt het!!

<?
$SQL="select * from inkoopfactuurdetails where ";
  $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
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.
Die tweede heb ik net veranderd maak maakt niets uit.
Hoe doe ik de foutafhandeling?
Het werkt in ieder geval wel, hier is een testje (op de command line van MySQL):

mysql> select emailadres from klant_order where upper(emailadres)=upper('[email protected]');
+--------------+
| emailadres   |
+--------------+
| [email protected] |
+--------------+
1 row in set (0.00 sec)


Foutafhandeling

<?
hier je query afschieten
if(!$sql1)
{
  echo '<br>';
  // Mysql error opvangen
 echo 'Er is een fout opgetreden in de query. <br />';
 echo mysql_error();
 echo '<br>';
 echo $sql1;
}
else
{
hier je code om de gevonde record(s) te tonen
}
?>


Reageren