3

私は自分のウェブサイトと私の人生のために「いいね」機能を書いていますが、この機能を機能させることができません!

これが単純化されたバージョンであると仮定すると、データベース構造は次のようになります。

id --- post_id --- user_id

1 --- 1 ----------- 1

2 --- 2 ----------- 1

そして、これは私が書いたコードです:

    public function userHasLikedPost($post_id,$user_id){
        $this->post_id_clean = sanitize($post_id);
        $this->user_id_clean = sanitize($user_id);

        global $mysqli,$db_table_prefix;
        $stmt = $mysqli->prepare("SELECT like_type FROM ".$db_table_prefix."post_likes WHERE user_id = ? AND post_id = ?");

        $stmt->bind_param("ii", $this->post_id_clean, $this->user_id_clean);

        $stmt->execute();
        $stmt->store_result();  

        $stmt->bind_result($like_type);

        $stmt->fetch();
        $result;

        if( $stmt->num_rows >0 ){
            $result = array("liked" => 1, "like_type" => $like_type);
        }else{
            $result = array("liked" => 0);
        }

        return print_r($stmt);

        $stmt->close();
    }

userHasLikedPost(1,1) を呼び出すと、コードは正しい行数を返します

mysqli_stmt Object ( [affected_rows] => 1 [insert_id] => 0 [num_rows] => 1 [param_count] => 2 [field_count] => 1 [errno] => 0 [error] => [error_list] => 配列( ) [sqlstate] => 00000 [id] => 5 ) 1

ただし、userHasLikedPost(2,1) を呼び出すと、間違った行数が取得されます。

mysqli_stmt Object ( [affected_rows] => 0 [insert_id] => 0 [num_rows] => 0 [param_count] => 2 [field_count] => 1 [errno] => 0 [error] => [error_list] => 配列( ) [sqlstate] => 00000 [id] => 5 ) 1

なぜこうなった?mysqli を正しく使用していますか? データはデータベースに存在し、PHPMyAdmin で手動でクエリを実行すると、正しい出力が得られます。この 1 つの関数を機能させるのに 2 時間ほど費やしました...返信ありがとうございます:)

4

1 に答える 1

2

問題を解決しました。私のビンディングの順番が間違っていました :/ なんて恥ずかしいハハ!

解決:

次のコード行を置き換えます。

$stmt->bind_param("ii", $this->post_id_clean, $this->user_id_clean);

と:

$stmt->bind_param("ii", $this->user_id_clean, $this->post_id_clean);
于 2013-03-28T17:14:49.260 に答える