-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

タイプミスでしょうか?$ bdは存在しますか、それとも$ dbである必要がありますか?

于 2013-02-02T23:59:54.107 に答える
0

恥知らずなプラグイン: 私は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);参照渡しを使用し、これが失敗するとエラーがスローされます。これをそこに貼り付けて、自分で試してみてください:

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

失敗する可能性があるこの問題を回避するには、$db->prepare()true が返されるかどうかを確認します。

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

さらに、最初のクエリで、ユーザー入力なしで行数​​のみをチェックする単一のクエリの準備のオーバーヘッドを追加することは、おそらく良い考えではありません。

于 2013-02-02T23:14:34.540 に答える
-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 に答える