检查用户名是否已存在

时间:2012-11-05 23:34:50

标签: php

我目前有这个代码,我写了:

$username = $_POST['username'];
$password = $_POST['password'];
$rpassword = $_POST['rpassword'];
$usrip = $_SERVER['REMOTE_ADDR'];
$email = $_POST['email'];
$errors = array();
$checkUsername = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username");
$checkUsername -> execute(array(':username' => $username));
$countUsername = $checkUsername -> fetchColumn(0);
if ($checkUsername != 0)
{
$errors['Username is already taken'];
}

然而,它似乎完全忽略了这一点,即使用户名相同(大写等),它仍然允许用户注册制作2个相同的用户。我的数据库如下所示:

http://puu.sh/1mTcZ/9b2ff3b68f44b4cc486beacc2d2b88fd

我似乎无法让这个工作。数据库结构如下所示: 精炼(dbname)>用户(表)>用户名(行)

非常感谢任何帮助。

编辑:

经过一些改变,这就是我所拥有的,但我似乎仍然遇到了同样的问题。

$checkUsername = $odb->prepare("SELECT COUNT(*) FROM `users` WHERE LOWER(`username`) = :username");
$checkUsername -> execute(array(':username' => $username));
$countUsername = $checkUsername -> fetchColumn(0);
if ($checkUsername != 0)
{
$errors['Username is already taken'];
}

用户名行现在也是utf8_general_ci

2 个答案:

答案 0 :(得分:2)

好的,我会发表评论作为答案。

您的IF语句正在评估不正确的变量。它应该是评估$ countUsername,而不是$ checkUsername。

此外,您似乎错误地初始化了错误数组。尝试:

if ($countUsername != 0)
{
    $errors[] = 'Username is already taken';
}

我已经在我的数据库上对此进行了测试,但它确实有效。

Collation = latin1_general_cs    (cs = case sensitive)

答案 1 :(得分:0)

尝试将表格排序设置为'utf8_general_ci'。 您也可以将sql查询更改为

$checkUsername = $odb->prepare("SELECT COUNT(*) FROM `users` WHERE LOWER(`username`) = :username");