0

Cookieを介して情報からテーブル行からデータを取得しようとしています。

これが私がこれまでに持っているものです:

    $cookie_id = @$_COOKIE['id'];
    $cookie_pass = @$_COOKIE['password'];

if ($_COOKIE['id']) {

    if ($stmt = mysqli_prepare($mysqli, "SELECT id, password FROM `members` WHERE id=? AND password=?")) {

        mysqli_stmt_bind_param($stmt, "ss", $cookie_id, $cookie_pass);

        mysqli_stmt_execute($stmt);

        mysqli_stmt_bind_result($stmt, $cookie_id, $cookie_pass);

        $logged = mysqli_stmt_fetch($stmt);
        printf("USER ID: %s\n", $cookie_id);
        // prints "1"

        echo "Hello, " . $logged['username'] . "!";
    }
}

その結果USER ID: 1 Hello, !、ページの一番上に表示されます。

私は何を間違っていますか?検索しようとしているテーブル行からユーザー名を取得できるように取得しようとしています。パスワードと ID に基づいて $logged['username'] (または行の任意のデータ) を表示するにはどうすればよいですか?

追加error_reporting(E_ALL);しても、追加のエラーは表示されません。

4

2 に答える 2

1

テーブルから選択passwordしているだけidなので、データをフェッチするときは取得できませんusername

一般的な構文は次のとおりです。

SELECT col1,col2, .... coln FROM `members` WHERE id=? AND password=?

選択する列を指定するために使用*する必要があります

あなたのプロセスは次のようになります:

if ($stmt = mysqli_prepare($mysqli, "SELECT id, password , username FROM `members` WHERE id=? AND password=?")) {

    mysqli_stmt_bind_param($stmt, "ss", $cookie_id, $cookie_pass);

    mysqli_stmt_execute($stmt);

    mysqli_stmt_bind_result($stmt, $cookie_id, $cookie_pass, $username);

    printf("Hello %s", $username);

}

ドキュメントを参照できます

于 2013-05-30T03:50:34.200 に答える
0

ユーザー名フィールドを印刷しようとしていますが、クエリの選択部分は ID フィールドとパスワード フィールドのみを取得しています。mysqli_get_result() または同様の関数とは異なり、mysqli_stmt_fetch() は成功または失敗のブール値のみを返し、出力は mysqli_stmt_bind_result() 関数で割り当てられた変数に渡されます。その関数の 3 番目のパラメータとして $username を追加し、select クエリの最後に username を追加すると、fetch() の呼び出し後に $username 変数にユーザーのユーザー名が入力されます。

明確にするために、クエリは次のようにする必要があります。

SELECT id, password,username FROM `members` WHERE id=? AND password=?

bind の呼び出しは次のようになります。

mysqli_stmt_bind_result($stmt, $cookie_id, $cookie_pass, $username);
于 2013-05-30T03:49:30.937 に答える