[php] Rare tekens in select query geeft problemen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maaark
  • Registratie: Juli 2008
  • Laatst online: 19-09 19:33
Hallo,

Ik heb de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
<?php

include('header.php');
$var = mysql_real_escape_string($_GET['var']);
$query = "SELECT uid FROM reizen WHERE area = '".$var."'";
echo $query;
$slct = mysql_query($query);
$rows = mysql_num_rows($slct);
echo $rows;
?>



Het probleem is nu als ik een naam heb zoals Sölden krijg ik geen resultaten (mysql_num_rows) geeft 0 aan.
Gebruik ik echter een naam zoals Fieberbrunn dan vind ik wel resultaten..
Phpmyadmin geeft echter bij Sölden wel resultaat..
Het ligt dus echt aan mijn query..

Iemand een idee?


Mark

Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Je kunt je variabelen escapen met mysql_real_escape
Dat is ook uit het oogpunt van security beter (als die $var uit een GET parameter komt bv.)


Alternatief (netter): placeholders.

[ Voor 35% gewijzigd door Juup op 22-06-2010 20:24 . Reden: TS gebruikt al mysql_real_escape() ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • Maaark
  • Registratie: Juli 2008
  • Laatst online: 19-09 19:33
Volgens mij doet ik dat al?
Op regel 4?

Of hoe bedoel je dit?

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 16:10

Lye

Juup schreef op dinsdag 22 juni 2010 @ 20:18:
Je kunt je variabelen escapen met mysql_real_escape
Dat is ook uit het oogpunt van security beter (als die $var uit een GET parameter komt bv.)

Alternatief (netter): placeholders.
Beter lezen, wordt al gebruikt en lost ook het probleem niet op.

Je probleem zit em in de gebruikte character sets, zorg dat je overal (HTML, php en database) dezelfde character set gebruikt (utf-8 ofzo).

Acties:
  • 0 Henk 'm!

  • Maaark
  • Registratie: Juli 2008
  • Laatst online: 19-09 19:33
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
staat in de html.
Hoe kan ik zien of de database in utf-8 staat? en de php?
En als het niet zo is, hoe zet ik die dan in utf-8?

Acties:
  • 0 Henk 'm!

Verwijderd

Maaark schreef op dinsdag 22 juni 2010 @ 20:25:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
staat in de html.
Hoe kan ik zien of de database in utf-8 staat? en de php?
En als het niet zo is, hoe zet ik die dan in utf-8?
Als je bij je database overzicht in PHPMyAdmin kijkt staat het in de tabel (onder 'collation'). Bij mij word het standaard op 'latin1_swedish_ci' gezet, geen idee waarom, maar ook nooit problemen mee gehad. Voor UTF-8 moet je 'utf8_general_ci' zetten, kan bij Operations als je de tabel bekijkt.
Je kunt het trouwens ook per field zetten, dus moet je even kijken of de UTF8 van de tabel word overgenomen

Acties:
  • 0 Henk 'm!

  • Maaark
  • Registratie: Juli 2008
  • Laatst online: 19-09 19:33
Dat heb ik inmiddels veranderd.
Maar het maakt niks uit, het werkt nog niet.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Maaark schreef op dinsdag 22 juni 2010 @ 20:46:
Dat heb ik inmiddels veranderd.
Maar het maakt niks uit, het werkt nog niet.
Nee, want de data die er in zit is (nog) geen UTF-8. Daarbij moet je voor de connection ook UTF-8 specificeren. En tot slot wil je waarschijnlijk caseAccent-insensitive zoeken; hoe dat precies bij MySQL zit is me overigens nog onduidelijk; daar doe ik te weinig voor met MySQL.

Heel dit riedeltje is overigens al honderden keren besproken. Probeer de search eens ;)

[ Voor 62% gewijzigd door RobIII op 22-06-2010 21:39 ]

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!

  • Aganim
  • Registratie: Oktober 2006
  • Laatst online: 22:47

Aganim

I have a cunning plan..

Case-insensitive zoeken is standaard bij Mysql, tenzij je een *-bin collatie gebruikt (bijv. utf8-bin). In zo'n geval wordt er wel case-sensitive gezocht. Dat was tenminste altijd mijn ervaring met Mysql.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Er staat me bij dat je daarvoor LIKE moet gebruiken in plaats van '=', maar pin me er niet op vast :)

Anders kun je natuurlijk altijd MATCH AGAINST gebruiken, mits je indici het toelaten en je de fulltekst search van MySQL vertrouwt :+

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Sorry Frag, da's onzin. Het zin hem echt puur in de gebruikte collation. :)

{signature}


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Aganim schreef op dinsdag 22 juni 2010 @ 21:08:
Case-insensitive zoeken is standaard bij Mysql, tenzij je een *-bin collatie gebruikt (bijv. utf8-bin). In zo'n geval wordt er wel case-sensitive gezocht. Dat was tenminste altijd mijn ervaring met Mysql.
:X |:( Ik bedoelde Accent-Insensitive maar van wat ik er van begrijp is dat default?

[ Voor 18% gewijzigd door RobIII op 22-06-2010 21:39 ]

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!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Voutloos schreef op dinsdag 22 juni 2010 @ 21:36:
Sorry Frag, da's onzin. Het zin hem echt puur in de gebruikte collation. :)
Mmm, als jij het zegt - ik meende dat LIKE wat flexibeler is met comparen, vandaar - we kunnen niet allemaal foutloos zijn helaas.. :+

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Aganim
  • Registratie: Oktober 2006
  • Laatst online: 22:47

Aganim

I have a cunning plan..

RobIII schreef op dinsdag 22 juni 2010 @ 21:37:
[...]

:X |:( Ik bedoelde Accent-Insensitive maar van wat ik er van begrijp is dat default?
Bij mijn weten gaat daar hetzelfde voor op, dus ja, dat is ook default zolang je geen *bin collation gebruikt. :)

[ Voor 8% gewijzigd door Aganim op 22-06-2010 21:45 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Aganim schreef op dinsdag 22 juni 2010 @ 21:44:
[...]
Bij mijn weten gaat daar hetzelfde voor op, dus ja, dat is ook default zolang je geen *bin collation gebruikt. :)
Nee, elke taal behandeld diakrieten weer anders. Wij negeren het bijvoorbeeld bij het sorteren, terwijl Duitsers er heel moeilijk om kunnen doen. :P Je moet dus de geschikte collation kiezen, en niet alle collations die niet op *bin eindigen zijn hetzelfde, dan zouden het er tenslotte niet zoveel hoeven zijn. ;)

Zie example 2 bij http://dev.mysql.com/doc/...set-collation-effect.html .

Overigens (gezien RobIII's link): Mysql's collation implementatie vereist dat je vooral de documentatie van mysql zelf moet lezen en die van de concurrentie. :X :+

[ Voor 11% gewijzigd door Voutloos op 22-06-2010 22:41 ]

{signature}


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07

TheNephilim

Wtfuzzle

Collatie van de DB op utf8 zetten, ook die van de tabel en het veld.

Onderstaande had ik ook nodig, zonder wilde het niet werken.

PHP:
1
2
// Charset
header('Content-Type: text/html; charset=utf8');


Daarnaast heb je ook nog de META met de charset utf8 zoals al eerder beschreven.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Bernardo schreef op dinsdag 22 juni 2010 @ 22:47:
Collatie van de DB op utf8 zetten, ook die van de tabel en het veld.
http://www.xaprb.com/blog...lly-not-all-that-complex/

Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07

TheNephilim

Wtfuzzle

Pagina: 1