2016-12-24 4 views
1

何らかの理由でこのPHPコードが実行中にNULLを返しています... cud any1親切にそれを修正するのに役立ちますか?php pdo:update + insert then select returns null

public function like($pid) 
     { 
      $uid = escape($_SESSION['user']); 
      $sql = $this->_db->prepare("UPDATE postsinitial SET likes = likes+1 WHERE pid = :m;INSERT IGNORE INTO userlikedposts (ulp_userid,ulp_postid) VALUES (:k, :m)"); 
      $sql->bindValue(':k', $uid); 
      $sql->bindValue(':m', $pid); 
      $sql->execute(); 

      $query = $this->_db->prepare("SELECT likes FROM postsinitial WHERE pid = :n"); 
      $query->bindParam(':n', $pid); 
      $query->execute(); 
      while($rows = $query->fetch()) 
      { 
       return $rows['likes']; 
      } 

     } 

私はすなわち、コードの$のSQLバッチをコメントアウトし、一人で$クエリバッチを実行し、個別のクエリの2つの部分を実行したときしかし、それが動作し、その値を返しますが...、それが正常に動作します。..しかし、述べたように結合されていません。私はそれをどのように実行するのですか?

私はまだ同じ結果BT selectクエリのためにあまりにもこのモデルを試してみた:

$query = $this->_db->prepare("SELECT likes FROM postsinitial WHERE pid = :n"); 
      $query->bindParam(':n', $pid); 
      $query->execute(); 
      while($rows = $query->fetch(PDO::FETCH_ASSOC)) 
      { 
       return $rows[0]['likes']; 
      } 
+0

PDOのエラーを報告していますか?私はそれが次のようになる可能性があると思ったが、私はデフォルトでmysqlが準備されたクエリエミュレーションを使用していると思います。マニュアルから:PDOStatement :: execute()を呼び出すときに、ステートメントに渡す値ごとに固有のパラメーター・マーカーを入れる必要があります。エミュレーション・モードがオンの場合を除き、プリペアド・ステートメントで同じ名前の名前付きパラメーター・マーカーを複数回使用することはできません。 – Progrock

+0

2つの部分を別々に実行すると、より明示的になりますか? – Progrock

答えて

0

答えは簡単です:

あなたは一つ一つの代わりにそれらすべてを詰め、あなたのクエリを実行する必要があります単一の呼び出し。あなたの挿入クエリをROMの更新と区別して実行しても問題ありません。

 public function like($pid) 
    { 
     $sql = "UPDATE postsinitial SET likes = likes+1 WHERE pid = ?"; 
     $this->_db->prepare($sql)->execute($_SESSION['user']); 

     $sql = "INSERT IGNORE INTO userlikedposts (ulp_userid,ulp_postid) VALUES (?, ?)"; 
     $this->_db->prepare($sql)->execute([$_SESSION['user'], $pid]); 

     $stmt = $this->_db->prepare("SELECT likes FROM postsinitial WHERE pid = ?"); 
     $stmt->execute([$pid]); 
     return $stmt->fetchColumn(); 
    } 
+0

tysm..works now! – Vanessa341

+0

すべてのクエリを個別に実行することを忘れないでください。 –

+0

は、 – Vanessa341