为什么此查询 MySQL 查询 运行 区分大小写?
Why is this query MySQL query running case-sensitive?
出于某种原因,此查询 运行 区分大小写:
$stmt = $db->prepare("SELECT * FROM people WHERE email = :email LIMIT 1");
它只是 returns 它是否找到了用户:
$stmt->bindParam(':email', $email);
$stmt->execute();
$row = $stmt->fetch();
if($row['email'] == $email)
{
return "<span style='color: red;'>User found.</span><br>";
} else {
return "<span style='color: red;'>User not found.</span><br>";
}
(顺便说一下,这只是暂存。一旦我看到它正常工作,就会进行密码散列)。
如果我使用与数据库条目相同的大小写,它发现用户没有问题。
这是我的 table,所以你可以看到它都已定义 ci:
这实际上是我在对 php 了解不多时建立的现有站点,因此我完全重写了很多内容,并设置了正确的密码散列和 https。在我编写新函数之前一切正常,数据库中没有任何变化...
所以现在它只检查输入的电子邮件,只是为了查看查询是否正常运行以及我们是否从数据库中获取结果,稍后我们将检查密码并添加实际的登录功能。
这是数据库中的数据:
现在,如果我将我的用户名填写为 "chris",并且将 运行 函数填写为 returns "User Found",那么我就知道查询成功了。如果我填成"Chris",然而,它是returns "User not found.",所以我知道它是不成功的。
虽然发现了问题。作为答案发布。
问题在于:
if($row['email'] == $email)
字符串的“==”比较区分大小写。更好的方法是使用:
if(!empty($row['email']))
如果$row['email']不为空,则查询返回结果成功,否则查询失败,可能是使用了与数据库。
要使字符串比较不区分大小写,需要三种方法之一
使用较低的(这会影响性能)
$stmt = $db->prepare("SELECT * FROM people WHERE LOWER(email) = LOWER(:email) LIMIT 1");
另一种方法是使用整理
我使用的一种方法是,我首先将电子邮件存储为小写字母,然后在进行搜索之前将搜索字符串转换为小写字母。
出于某种原因,此查询 运行 区分大小写:
$stmt = $db->prepare("SELECT * FROM people WHERE email = :email LIMIT 1");
它只是 returns 它是否找到了用户:
$stmt->bindParam(':email', $email);
$stmt->execute();
$row = $stmt->fetch();
if($row['email'] == $email)
{
return "<span style='color: red;'>User found.</span><br>";
} else {
return "<span style='color: red;'>User not found.</span><br>";
}
(顺便说一下,这只是暂存。一旦我看到它正常工作,就会进行密码散列)。
如果我使用与数据库条目相同的大小写,它发现用户没有问题。
这是我的 table,所以你可以看到它都已定义 ci:
这实际上是我在对 php 了解不多时建立的现有站点,因此我完全重写了很多内容,并设置了正确的密码散列和 https。在我编写新函数之前一切正常,数据库中没有任何变化...
所以现在它只检查输入的电子邮件,只是为了查看查询是否正常运行以及我们是否从数据库中获取结果,稍后我们将检查密码并添加实际的登录功能。
这是数据库中的数据:
现在,如果我将我的用户名填写为 "chris",并且将 运行 函数填写为 returns "User Found",那么我就知道查询成功了。如果我填成"Chris",然而,它是returns "User not found.",所以我知道它是不成功的。
虽然发现了问题。作为答案发布。
问题在于:
if($row['email'] == $email)
字符串的“==”比较区分大小写。更好的方法是使用:
if(!empty($row['email']))
如果$row['email']不为空,则查询返回结果成功,否则查询失败,可能是使用了与数据库。
要使字符串比较不区分大小写,需要三种方法之一
使用较低的(这会影响性能)
$stmt = $db->prepare("SELECT * FROM people WHERE LOWER(email) = LOWER(:email) LIMIT 1");
另一种方法是使用整理
我使用的一种方法是,我首先将电子邮件存储为小写字母,然后在进行搜索之前将搜索字符串转换为小写字母。