检查用户是否提交了用户名'已经在数据库中了:
这总是返回"用户名是唯一的!"
$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>";
}
所以我的问题是,这有什么问题?而且,还有更好的方法吗?感谢。
答案 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',
)
这样做可能不是一个好主意,因为您将所有用户名存储在内存中并搜索此数据。这里发布的其他建议是关于使用预准备语句提取单个用户名(如果存在的话)是更好的方法。