Question

i besoin d'effectuer une recherche de nom dans la base de données basée sur un ensemble de mots-clés. le résultat doit être insensible accent sensible et cas.

suivant la solution que j'ai trouvé en plus quelques modifications pour permettre à la casse, je l'ai utilisé le code suivant:

$sql = "SELECT name FROM table_names WHERE LOWER(name) LIKE _utf8 '%".strtolower($keyword)."%' COLLATE utf8_bin";

cela ne fonctionne pas pour moi quand le mot-clé de recherche contient des accents. mais la chose étrange est que cette requête fonctionne bien dans phpMyAdmin (mais je l'ai lu quelque part que cela ne devrait pas être fiable). ce qui pourrait être le problème ici?

Mise à jour: i révisé mon code à:

$sql = "SELECT name FROM table_names WHERE LOWER(name) LIKE LOWER(_utf8 '%$keyword%') COLLATE utf8_bin";

mais je n'ai toujours pas de résultats.

merci!

Était-ce utile?

La solution

Vous pouvez essayer de faire écho à la sql en cours d'exécution et de vérifier si les accents sont là.

Je pense qu'ils ne sont pas ...

[EDIT]

Pouvez-vous essayer ceci:

php.

<html>
<head>
</head>

<body>
<form action="" method="get">
<input name="name" type="text"/>
<input type="submit" value="go"/>
</form>

<?php
if (!empty($_GET['name'])) {
    $mysqli = new mysqli('localhost', 'root', '', 'test');
    $mysqli->set_charset('latin1');

    $_GET['name'] = utf8_encode($_GET['name']);

    if ($result = $mysqli->query('select * from dummy where LOWER(name) LIKE _utf8 \'%' . $_GET['name'] . '%\' COLLATE utf8_bin')) {
        while ($obj = $result->fetch_object()) { 
            var_dump($obj->name); 
        }
    }
    $mysqli->close();
}
?>
</body>
</html>

mysql: (peu importe)

CREATE TABLE `dummy` (
  `id` int(11) NOT NULL,
  `name` varchar(45) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5$$

Celui-ci fonctionne pour moi ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top