检查用户是否存在php和mysql stmt

时间:2013-02-02 23:03:44

标签: php mysql authentication

我正在使用php和mysql创建一个身份验证文件,但我在这行中有这个错误:

$stmt2->bind_param('ss',$twitter_id, $name);

错误消息是

  

在...

中的非对象上调用成员函数bind_param()

我的错误在哪里?

  • 我的数据库中的$ name是VARCHAR
  • 我的数据库中的
  • $ twitter_id是VARCHAR
  • $ bd是我的数据库连接

如果用户已经注册,它应该显示一条消息“用户已注册”,如果用户未注册,则应在我的数据库中插入新的ID和名称。

session_start();
if (!isset($_SESSION['userdata'])) {
    header("location: index.php");
} else {
    $userdata = $_SESSION['userdata'];
    $name = $userdata->name;
    $twitter_id = $userdata->id;
    $stmt = $bd->prepare("SELECT ID_TWITTER FROM USERS");
    $stmt->execute();                
    $stmt->bind_result($checkUser);
    if ($stmt->fetch()) {
    if($checkUser!==$twitter_id){
            $cSQL = "INSERT INTO USERS (ID_TWITTER, FULL_NAME) VALUES(?,?)";
            $stmt2 = $bd->prepare($cSQL);
            $stmt2->bind_param('ss',$twitter_id, $name);
            $stmt2->execute();
            $stmt2->close();
    } else {
        echo "User already exits";
    }
    }
    $stmt->close();
}

3 个答案:

答案 0 :(得分:0)

无耻的插件:我在a project I have on github中做了这件事。随意使用课程,无论你喜欢什么;他们大多是复制品。

真正的问题是$bd->prepare()返回false 检查您是否确实正确地调用了它并将其设置为new mysqli(*params)

错误Call to a member function ... on a non-object in ...表示$db不是对象,这意味着它未实例化为对象。因此,$this->method()是不可能的。 bind_param(string $format, mixed &*vars);使用pass-by-reference,如果失败,则会抛出错误。 坚持下去就自己尝试一下:

$stmt->bind_param("ss", "string", "string");

要解决可能失败的问题,请检查$db->prepare()是否返回true:

if ($query = $bd->prepare($sql)) {
    //stuff
}

此外,在第一个查询中,为单个查询添加准备开销可能不是一个好主意,该查询仅检查行数而无需用户输入。

答案 1 :(得分:0)

这可能是拼写错误吗? $ bd是否存在或应该是$ db?

答案 2 :(得分:-2)

解决:它现在有效

        $stmt = $bd->prepare("SELECT ID_PROVIDER FROM USERS WHERE ID_PROVIDER = ?");
        $stmt->bind_param('s', $twitter_id);
        $stmt->execute();
        $stmt->bind_result($checkUser);
        while ($stmt->fetch()) {
            $result = $checkUser;
        }
        if (empty($result)) {
            $cSQL = "INSERT INTO USERS (ID_TWITTER, FULL_NAME) 
           VALUES(?,?)";
            $stmt2 = $bd->prepare($cSQL);
            $stmt2->bind_param('ss', $twitter_id, $name);
            $stmt2->execute();
            $stmt2->close();
        }else {
    echo "User already exits";
}