私の現在のプロジェクトでは、MySQL にある辞書データベースのブラウザーを作成したいと考えています。これらの単語には特殊文字が含まれており、UTF-8 エンコーディングを使用しています。これまでのところ、ユーザーの入力を調べて関連情報を出力する、機能する「検索」を作成しました。
ここで私は問題に遭遇します。ユーザーが通常の文字をすべて入力すると、コードは正しく機能します。ただし、特殊文字を含むものを入力すると、クエリは常に null を返します。
関連するコードは次のとおりです。
HTML ページ:
<html>
<body>
<form action="test.php" method="get">
Search dictionary: <input type="text" name="search">
<input type="submit" value="Submit">
</form>
<br>
</body>
</html>
PHP スクリプト (抜粋):
<?php
$q=$_GET['search'];
$id = "";
if (strlen($q) > 0) {
// connects to DB
$db = new PDO('mysql:host=localhost;dbname=***', '***', '***');
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
$query="SELECT DISTINCT e.lexeme_id, l.posc
FROM entry e
INNER JOIN lexeme l
USING (lexeme_id)
WHERE e.lemma = '".$q."'";
$stmt=$db->prepare($query);
$stmt->execute();
foreach ($stmt as $row) {
$id = $row['lexeme_id'];
$posc = $row['posc'];
//output results here
echo "<h1>".$q."</h1><br/>";
echo "<h2>".$posc."</h2><br/>";
}
}
?>
検索ボックスに「man」と入力すると、適切なデータが表示されます。ただし、「maðr」を検索しても結果は得られません。ただし、MySQL Workbench で同じクエリを実行すると、正しい出力が得られます。使用するクエリをスクリプトに出力させましたが、本来あるべきものと一致しています。
TL;DR: 次のクエリは、MySQL Workbench でファイルを実行しますが、PHP スクリプトを介して HTML ページで呼び出すと実行されません。
SELECT DISTINCT e.lemma
FROM entry e
INNER JOIN lexeme l
USING (lexeme_id)
WHERE e.lexeme_id = "maðr"
何がうまくいかないのでしょうか?ありがとう!