PHP / MYSQL查询无效,编码错误?

时间:2014-02-19 14:46:29

标签: php mysql encoding

我有一个奇怪的问题困扰我一段时间了,我无法解决它。 出于测试目的,我创建一个带有参数的URL,该参数用于从数据库中获取结果。它大部分时间都可以正常工作,但它似乎很难与特殊字符一起使用,比如“ß”。

以下是用户urlencoded的示例网址:

https://www.testurl.com/login.php?user=bu%DFmann(bu%DFmann =bußmann)

这是我的php脚本的一部分:

$user = new User;
$loginOrEmail = $this->_helper->get_request_value("user", array("get"));
if ($user->check_user_is_valid($loginOrEmail)) {
.........

这是check_user_is_valid方法:

$sql = "SELECT * FROM user WHERE (email='" . mysql_real_escape_string($loginOrEmail) . "' OR login='" . mysql_real_escape_string($loginOrEmail) . "') AND activated = 'yes'";
$result = $database->query($sql);

if (mysql_num_rows($result) < 1) {
    return false;
}
return true;

现在这似乎为上面的url返回false。如果我打印查询(使用print_r或var_dump),查询看起来很好:

SELECT * FROM user WHERE (email='bußmann' OR login='bußmann') AND activated = 'yes'

事实上。如果我将此查询复制并粘贴到phpMyAdmin并执行它,它会产生我期待的行。 这里发生了什么?问题出在哪儿?我很确定它与错误的编码或其他东西有关,因为它适用于所有其他名称。

我连接到数据库后已经有mysql_set_charset('utf-8', $connection);

请注意:我知道这既不安全也不是最佳方式。它仅用于测试目的。

2 个答案:

答案 0 :(得分:1)

为了关闭问题并将其标记为已解决,并按照OP's request包含多个注释来排查/查明问题,就是将文件的编码“保存”为UTF-8而不是目前使用“iso-8859-1”

答案 1 :(得分:0)

尝试在数据库连接后放置mysql_set_charset

$link = mysql_connect('localhost', 'user', 'password');
mysql_set_charset('utf8',$link);