PHP表单验证:唯一提交

时间:2015-04-24 16:16:56

标签: php mysql

检查用户是否提交了用户名'已经在数据库中了:

这总是返回"用户名是唯一的!"

$check = $pdo->query("SELECT username FROM users");
$result = $check->fetchAll(PDO::FETCH_ASSOC);

if(!in_array($_POST['username'], $result))
{
    echo "Username is unique! <br>";        
}
else 
{
    echo "Username already exists. <br>";
}

所以我的问题是,这有什么问题?而且,还有更好的方法吗?感谢。

2 个答案:

答案 0 :(得分:4)

询问数据库是否已有值。像

这样的东西
$check = $pdo->prepare("SELECT username FROM users where username = ?");
$check->execute(array($_POST['username']));
if($row = $check->fetch()) {
     echo "Username already exists. <br>";
} else {
     echo "Username is unique! <br>";
}

答案 1 :(得分:2)

因此,fetchAll()将返回一个关联数组,即

array(
  0 => array(
    'username' => 'foo',
  ),
  1 => array(
    'username' => 'bar',
  ),
  // ...
)

in_array()函数不会递归遍历每个子数组,因此将针对每个顶级数组进行检查。您可以通过将fetchAll()更改为fetchCol()来解决这个问题,fetchCol()将返回一个扁平数组,即

array(
  0 => 'foo',
  1 => 'bar',
)

这样做可能不是一个好主意,因为您将所有用户名存储在内存中并搜索此数据。这里发布的其他建议是关于使用预准备语句提取单个用户名(如果存在的话)是更好的方法。