2013-03-28 130 views
3

我正在爲我的網站和我的生活寫一個'喜歡'的功能,我無法使用此功能!mysqli返回的行數不正確

假設這是一個簡化版本,我的數據庫結構:

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對象([affected_rows] => 1 [INSERT_ID] => 0 [NUM_ROWS] = > [param_count] => 2 [field_count] => 1 [errno] => 0 [error] => [error_list] => Array()[sqlstate] => 00000 [id] => 5)1

但是,如果我呼叫userHasLikedPost(2,1),我會得到不正確的行數。

mysqli_stmt對象([affected_rows] => 0 [INSERT_ID] => 0 [NUM_ROWS] => [param_count] => 2 [FIELD_COUNT] => 1 [錯誤] => 0 [錯誤] => [error_list] => Array()[sqlstate] => 00000 [id] => 5)1

這是怎麼回事?我正確使用mysqli嗎?數據存在於數據庫中,如果我在PHPMyAdmin中手動運行查詢,我將得到正確的輸出。我花了2個小時試圖讓這一個功能工作......預先感謝任何回覆:)

+0

請問您的sanitize函數應用於引號字符串?這只是mysqli也會淨化價值的約束。 – karmafunk

回答

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); 
+1

嗨,喬爾,很高興你把它修好了。你介意擴大這個答案,幷包括你的更新代碼,以便它對未來的訪問者更有用 –

+1

我正準備發佈它!沒問題,我們都這麼做;) – methai

+0

謝謝你們。剛剛更新我的回答:) –