2015-06-18 109 views
0

我已經編寫了一個查詢來返回一篇文章的所有評論,從該文章中排除阻止的用戶。我已經在phpmyadmin中測試了這個查詢,並且給出了給定的帖子(其中1個用戶被阻止)的4/5可能的評論。PHP:PDO查詢不返回結果,但相同的查詢返回4結果在phpmyadmin?

查詢看起來像:

$query = "SELECT ent.Entity_Id, ent.Profile_Pic_Url, ent.First_Name, ent.Last_Name, ent.Last_CheckIn_Place, comments.Content 
      FROM checkin_comments AS comments 
      JOIN entity AS ent 
      ON  comments.Entity_Id = ent.Entity_Id 
      LEFT JOIN friends AS f 
      ON  ent.Entity_Id = :entityId 
      WHERE comments.Chk_Id = :checkInId 
      AND f.Category != 4 
      GROUP BY comments.Comment_Id 
      "; 

// Bind the parameters to the query 
$data = Array(":checkInId" => (int)$checkInId, ":entityId" => (int)$userId); 

如果我運行值1726爲checkinId和1517爲用戶id我得到預期的結果對phpMyAdmin的查詢,但在PHP中,我得到0的結果。我用var_dump打印數據的內容,它顯示爲:

array(2) { 
[":checkInId"]=> 
int(1726) 
[":entityId"]=> 
int(1517) 
} 

爲什麼我在PHP中遇到不同的結果?我的所有其他查詢如果我換了綁定變量的值數量的查詢工作正常,這使我相信這是與PDO值綁定到查詢問題運行良好

編輯。當我執行綁定我用我的PDO包裝類,其執行以下方法:

public function fetchAll($query, $data = null) 
{ 
    $stmt = $this->prepareQuery($query, $data); 
    return $stmt->fetchAll(); 
} 

private function prepareQuery($query, $data = null) 
{ 
    $stmt = $this->connection->prepare($query); 
    $stmt->execute($data); 
    return $stmt; 
} 

這是否尖叫答案PDO的任何有經驗的用戶?

+0

你寫了:checkinId的值爲1726,userId的值爲1527 **,但綁定** 1517 ** – venca

+0

你在哪裏準備並執行這個查詢?僅僅分配給'$ data'是不夠的。 – tadman

+0

我寫了一個簡單的pdo包裝。我知道你會認爲這是必要的問題,但我有大約20其他查詢運行相同的包裝,他們返回就好。 – Alex

回答

-2

我想你不會在單引號中包含參數。試試這個代碼

$query = "SELECT `ent`.`Entity_Id`, `ent`.`Profile_Pic_Url`, `ent`.`First_Name`, `ent`.`Last_Name`, `ent`.`Last_CheckIn_Place`, `comments`.`Content` 
     FROM `checkin_comments` AS `comments` 
     JOIN `entity` AS `ent` 
     ON  `comments`.`Entity_Id` = `ent`.`Entity_Id` 
     LEFT JOIN `friends` AS `f` 
     ON  `ent`.`Entity_Id` = ':entityId' 
     WHERE `comments`.`Chk_Id` = ':checkInId' 
     AND `f`.`Category` != 4 
     GROUP BY `comments`.`Comment_Id` 
     "; 

// Bind the parameters to the query 
$data = Array(":checkInId" => (int)$checkInId, ":entityId" => (int)$userId); 

我希望這會有所幫助。

+3

如有必要,PDO的佔位符被引用。添加這樣的引號可能導致雙重轉義,並且無論如何都是毫無意義的。不要這樣做。 – tadman