来自其他表的PHP

问题描述:

的一个表使用列表获取数据我有以下各表来自其他表的PHP

myListTable

playerId listId type 
50  10  0 
51  10  0 

球员

id x xx etc 
50 x xx etc 
51 x xx etc 

我想运行一个查询在那里我提供listId和类型并且它将得到与该listId相关的所有玩家的列表,并且类型

try { 
    $conn = $this->GetDBConnection(); 
    $type = 0; // 0 REQUEST BY PLAYERS 
    $statement = $conn->prepare('SELECT p.* FROM myListTable c, players p WHERE (c.listId = :listId) AND (c.type = :type) AND (p.id = c.playerId) '); 
    $statement->bindParam(':listId', $listId, PDO::PARAM_INT); 
    $statement->bindParam(':type', $type, PDO::PARAM_INT); 
    $statement->execute(); 
    if(!($row = $statement->fetchAll(PDO::FETCH_ASSOC))) { 
     return false; 
    } 
    $conn = null; 
} catch(PDOException $e) { 
    throw $e; 
} 

这只是让我错误。我需要做些什么来解决这个问题?

+0

':c.listId'应改为':listId'。 – hjpotter92 2013-03-18 08:26:37

+0

它是,所有这些类型的错误 – 2013-03-18 08:27:45

其中一个错误是在你准备查询一个错字:

$statement = $conn->prepare('SELECT p.* 
    FROM myListTable c, players p 
    WHERE (c.listId = :c.listId) 
     AND (c.type = :type) 
     AND (p.id = c.playerId) '); 

:c.listId应该只是:listId

第二个是,type是MySQL中的一个保留字。您需要反引号以在您的查询中转义它。

另一个是,因为您只是从players表中选择值;优选JOIN

查询应该是:

SELECT p.* 
FROM players p 
JOIN myListTable c 
    ON (p.id = c.playerId) 
WHERE (c.listId = :c.listId) 
    AND (c.`type` = :type) 
+0

所有这些变化,结果仍然是错误的:( – 2013-03-18 08:42:38

+0

即使使用反引号for'type'? – hjpotter92 2013-03-18 08:44:22

+0

您尝试在某处手动运行此查询? – 2013-03-18 08:46:25