2

一連のキーワードに基づいて、データベースで名前検索を実行する必要があります。結果は、アクセントを区別し、大文字と小文字を区別しない必要があります。

ここで見つけたソリューションに加えて、大文字と小文字を区別しないようにするためのいくつかの変更に従って、次のコードを使用しました。

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

検索キーワードにアクセントが含まれている場合、これは機能しません。しかし、奇妙なことに、このクエリはphpMyAdminでうまく機能します(しかし、これは信頼できないはずだとどこかで読みました)。ここで何が問題になる可能性がありますか?

更新:コードを次のように修正しました:

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

しかし、私はまだ結果がありません。

ありがとう!

4

1 に答える 1

2

実行中のSQLをエコーし​​て、アクセントがあるかどうかを確認できます。

私の推測では、そうではありません...

[編集]

これを試すことができますか:

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: (関係ありません)

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

これは私のために働く...

于 2010-09-21T07:38:02.457 に答える