我正在尝试实现一个函数,如果一个具有相同名称的字段(如给定的字段)尚不存在,则该函数将在数据库中插入新条目。特别是我想限制表中的重复用户名。
我能想到的唯一方法是运行一个select查询然后如果没有返回任何内容就运行insert查询。出于某种原因,虽然我无法让它工作......
我的数据库选择功能
function getAllUsers($user)
{
$stmt = $this->db->stmt_init();
$stmt->prepare('SELECT username from users where username=? ');
$stmt->bind_param("s", $user);
$stmt->bind_result($username);
$stmt->execute();
$results = array();
while($stmt->fetch())
{
$results[] = array('username' => $username);
}
$stmt->close();
return $results;
}
我的PHP代码(这是在不同的页面中)
foreach ($GLOBALS['db']->getAllUsers($_POST['username']) as $i)
{
$results = "".$i['username']."";
break;
}
if(strcmp($results, "")==0)
{
if($GLOBALS['db']->addUser($_POST['username'],$_POST['password']))
{
session_destroy();
echo "registerSucces";
}
else
{
session_destroy();
echo "registerError";
}
}
else
{
echo "userNameExists";
}
你能看到这个错误吗?
由于
麦克
仍然无法找到如何使上面的代码工作,但以防有人需要这个:一个临时的简单解决方案是根本不比较字符串,而是在foreach循环中有一个计数器,然后检查所需的数字(在我的情况下为0)...
答案 0 :(得分:1)
SQLite支持UNIQUE constraint。只需在列上声明一个UNIQUE索引,并检查INSERT是否失败。
答案 1 :(得分:1)
如果您在表中使用用户名作为主键,则可以使用INSERT OR IGNORE命令而不是检查用户名是否已存在。
如果SQLite发现INSERT或IGNORE命令与表中的现有行冲突,它将忽略该命令。
的INSERT command中找到更多内容