简单的PHP SQLite问题

时间:2011-02-21 23:28:59

标签: php sqlite select insert

我正在尝试实现一个函数,如果一个具有相同名称的字段(如给定的字段)尚不存在,则该函数将在数据库中插入新条目。特别是我想限制表中的重复用户名。

我能想到的唯一方法是运行一个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)...

2 个答案:

答案 0 :(得分:1)

SQLite支持UNIQUE constraint。只需在列上声明一个UNIQUE索引,并检查INSERT是否失败。

答案 1 :(得分:1)

如果您在表中使用用户名作为主键,则可以使用INSERT OR IGNORE命令而不是检查用户名是否已存在。

如果SQLite发现INSERT或IGNORE命令与表中的现有行冲突,它将忽略该命令。

您可以在SQLite documentation

INSERT command中找到更多内容