导致MySQL失败的特殊字符
对于我当前的项目,我想为我在MySQL中使用的字典数据库创建一个浏览器。这些单词包含特殊字符,而我正在使用UTF-8编码。到目前为止,我已经做了一个功能性的“搜索”,查找用户的输入并输出相关信息。导致MySQL失败的特殊字符
这是我遇到问题的地方。如果用户输入所有普通字符,则代码正常工作。但是,如果他们放入任何特殊字符的东西,查询总是返回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/>";
}
}
?>
如果我输入 “人” 在搜索框中,适当的数据被拉起。但是,如果我搜索“mard”,我就没有结果。但是,如果我在MySQL Workbench中尝试相同的查询,我会得到正确的输出。我有脚本打印出它使用的查询,并且它匹配应该是。
TL; DR:下面的查询运行在MySQL Workbench中的文件,而不是当我把它称为我的HTML页面上通过一个PHP脚本 -
SELECT DISTINCT e.lemma
FROM entry e
INNER JOIN lexeme l
USING (lexeme_id)
WHERE e.lexeme_id = "maðr"
任何想法可能什么错?谢谢!
header('Content-type: text/plain; charset=utf-8');
在你的PHP脚本,使它UTF8
我试过这个,但无济于事。我认为我已经在每个可能的时刻添加了UTF8编码,但它仍然行事不端。 – user1261711
我不知道为什么,但它似乎现在正常工作。 o.O – user1261711
这听起来很棒;) – Tredged
确保所有的脚本(PHP脚本,HTML文件,并和其他一切)进行编码UTF8。 – Bjoern
截至目前,我只是运行我在这里发布的内容。我是否适当地设置了编码? – user1261711
你必须在你的文件中检查这个。许多代码编辑器(p.e. notepad ++)都有类似“convert to utf8”或类似的选项。 – Bjoern