2017-09-03 29 views
-1

我目前正在实现一个使用PHP和PDO的跟踪系统。代码根据插入的数据确定是否显示按钮“Follow”或“Unfollow”。数据库正在更新,但出于某种原因,大于或等于运算符无法正常工作,或者我没有正确查询数据库。 (不知道哪个)任何人都知道我在做什么错了?PHP/PDO查询后大于等于运算符

在followon.php:

if($row['userID'] && $row['userName']){ 
    if($row['userID']!=$user_id){ 
     $follow_userid = $row['userID']; 

     $stmt = $user_follow->runQuery("SELECT id FROM following WHERE user1_id=':user_id' AND user2_id=':follow_userid'"); 
       $stmt->execute(array(":user_id"=>$user_id,":follow_userid"=>$follow_userid)); 
       $follow = $stmt->fetch(PDO::FETCH_ASSOC); 

       if(!$follow >= 1){ 

      $stmt = $user_follow->runQuery("INSERT INTO following(user1_id, user2_id) VALUES (?, ?)"); 
       $stmt->bindValue(1,$user_id); 
       $stmt->bindValue(2,$follow_userid); 
       $stmt->execute(); 

      $stmt = $user_follow->runQuery("UPDATE tbl_users SET following = following + 1 WHERE userID = ?"); 
       $stmt->bindValue(1,$user_id); 
       $stmt->execute(); 

      $stmt = $user_follow->runQuery("UPDATE tbl_users SET followers = followers + 1 WHERE userID = ?"); 
       $stmt->bindValue(1,$follow_userid); 
       $stmt->execute(); 

       } 

     header("Location: index.php?id=".$currentID); 
     } 
} 

在followoff.php:

if($row['userID'] && $row['userName']){ 
    if($row['userID']!=$user_id){ 
     $unfollow_userid = $row['userID']; 

     $stmt = $user_unfollow->runQuery("SELECT id FROM following WHERE user1_id=':user_id' AND user2_id=':unfollow_userid'"); 
       $stmt->execute(array(":user_id"=>$user_id,":unfollow_userid"=>$unfollow_userid)); 
       $follow = $stmt->fetch(PDO::FETCH_ASSOC); 

       if($follow >= 1){ 

      $stmt = $user_unfollow->runQuery("DELETE FROM following WHERE user1_id= ? AND user2_id= ?"); 
       $stmt->bindValue(1,$user_id); 
       $stmt->bindValue(2,$unfollow_userid); 
       $stmt->execute(); 

      $stmt = $user_unfollow->runQuery("UPDATE tbl_users SET following = following - 1 WHERE userID = ?"); 
       $stmt->bindValue(1,$user_id); 
       $stmt->execute(); 

      $stmt = $user_unfollow->runQuery("UPDATE tbl_users SET followers = followers - 1 WHERE userID = ?"); 
       $stmt->bindValue(1,$unfollow_userid); 
       $stmt->execute(); 

       } 

     header("Location: index.php?id=".$currentID); 
     } 
} 

而在index.php文件(如果出现按钮):

if($user_id){ 
       if($user_id!=$id){ 

        $query2 = $user_home->runQuery("SELECT id FROM following WHERE user1_id=':user_id' AND user2_id=':id'"); 
             $query2->execute(array(":user_id"=>$user_id,":id"=>$id)); 
             $query2result = $query2->fetch(PDO::FETCH_ASSOC); 

        if($query2result >= 1){ 
               echo "<a href='followoff.php?id=$currentID' class='btn btn-default btn-xs'>Unfollow</a>"; 

        } 
        else{ 

         echo "<a href='followon.php?id=$currentID' class='btn btn-info btn-xs'>Follow</a>"; 

        } 
       } 
      } 
+1

'$ query2result' is __array__。它如何可以大于1?你在这里比较什么? –

+1

您正在使用带有占位符值的准备好的语句,这很好,但记住占位符*不应该有周围的引号*。如果认为有必要,那些由数据库驱动程序添加。 – tadman

回答

1

你想测试带有ID的结果集$query2->fetch将返回一个关联数组。

您需要访问结果集中的领域...

if($query2result['id'] >= 1){ 

如果您只想说如果行没有得到回报,它将返回false

if($query2result !== false){ 
+0

这些解决方案似乎都不适合我。 – Cordell

+1

你做了一个'print_r($ query2result);'看看它包含了什么。 –