-2

以前は、まもなく非推奨になる通常の mysql 関数で、次のものがありました。

    // On first connect to database, create a user to hold data for users not logged in
    if (mysql_num_rows(mysql_query("SELECT id FROM users WHERE id=1")) === 0) {
        mysql_query("INSERT INTO users(id,username,email,password) VALUES(1,'anonymous','anonymous','" . password_hash("noidentity", PASSWORD_BCRYPT) . "')");
    }

これは私が今持っているもので、同じことを達成しようとしています:

    // On first connect to database, create a user to hold data for users not logged in
    $stmt = $db->prepare("SELECT id FROM users WHERE id = ?");
    $stmt->execute(1);
    $stmt->store_result();
    if ($stmt->num_rows == 0) {
        $stmt = $db->prepare("INSERT INTO users (id, username, email, password) VALUES (?, ?, ?, ?)");
        $stmt->execute(1, 'anonymous', 'anonymous', password_hash("noidentity", PASSWORD_BCRYPT));
    }

「警告: mysqli_stmt::execute() は正確に 0 個のパラメーターを期待していますが、1 個指定されています」というエラーが表示され続けますが、疑問符が 1 つあるため、1 を期待しているように見えますが、明らかに何か間違ったことをしています。

私は次のもののためにそれを正しくやっていますか?

$stmt = $db->prepare("UPDATE users SET wins = wins + 1 WHERE id = ?");
$stmt->execute($_SESSION["id"]);

私は持っているべきですか?勝利=一部?もしそうなら、そこにある現在の値に依存する場合、後でその値をどのように入力しますか?

どうですか:

$stmt = $db->prepare("SELECT id, username, password FROM users WHERE email = ?");
$stmt->execute($email);
$row = $stmt->fetch();

if (password_verify($password, $row["password"])) {

私はそこでそれをやっていますか?

セキュリティ上の目的でこれらの準備されたステートメントを把握しようとしているだけで、少し難しいと感じています。

4

1 に答える 1

2

このコードを使用bind_paramして、データを設定するために使用する必要があります。

$stmt = $db->prepare("SELECT id FROM users WHERE id = ?");
$stmt->bind_param('i', 1);
$stmt->execute();
于 2013-02-21T04:25:40.167 に答える