-1

我正在使用 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();
}
4

3 回答 3

0

无耻的插件:我在 github 上的一个项目中做这件事。随意使用这些课程来做任何你喜欢的事情;它们大多是可复制粘贴的。

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

该错误Call to a member function ... on a non-object in ...意味着它$db不是一个对象,这意味着它没有被实例化为一个对象。因此,$this->method()是不可能的。bind_param(string $format, mixed &*vars);使用传递引用,如果失败,则会引发错误。把它贴在那里自己试试:

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

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

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

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

于 2013-02-02T23:14:34.540 回答
0

会不会是笔误?$bd 存在还是应该是 $db ?

于 2013-02-02T23:59:54.107 回答
-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";
}
于 2013-02-03T22:37:56.857 回答