从正确的表中检索值

时间:2012-10-22 17:02:37

标签: php mysql sql database mysqli

我想要从表 list (见下文)中检索表 listUser 中的所有帖子,以及与特定用户ID匹配(在同一个表中, listUser )。但是,查询似乎有些问题,因为我收到以下错误消息。

我绑定了与 list 相同数量的字段,所以不是这样。但是,不应检索所有列表,只检查表 listUser 中匹配的listId以及userId in匹配的列表。

我希望所有这一切都有道理,否则请告诉我。

错误消息:

警告:mysqli_stmt :: bind_result()[mysqli-stmt.bind-result]:绑定变量数与/ Applications / XAMPP / xamppfiles / htdocs / Collaborage / Model / Database中预准备语句中的字段数不匹配第166行的.php

TABLES:

  • list:listId,userId,listName,creationDate,expireDate,isPublic
  • listUser:listUserId,listId,userId,isFinished,hasStarted

型号:

public function GetAllAssignedLists($userId) {

    $query = "SELECT * FROM list AS l
                INNER JOIN listUser AS lu
                ON l.listId = lu.listId
                WHERE l.userId = ?";

    $stmt = $this->m_db->Prepare($query);

    $stmt->bind_param('i', $userId);

    $assignedLists = $this->m_db->GetLists($stmt);

    return $assignedLists;
}

数据库:

public function GetLists($stmt) {

    if ($stmt === FALSE) {
            throw new \Exception($this->mysqli->error);
    }

    if ($stmt->execute() == FALSE) {
            throw new \Exception($this->mysqli->error);
    }

    if ($stmt->bind_result($listId, $userId, $listName, $creationDate, $expireDate, $isPublic) == FALSE) {
        throw new \Exception($this->mysqli->error);
    }

    while ($stmt->fetch()) {
        $lists[] = array('listId' => $listId,
                       'userId' => $userId,
                       'listName' => $listName,
                       'creationDate' => $creationDate,
                       'expireDate' => $expireDate,
                       'isPublic' => $isPublic);
    }

    $stmt->Close();

    return $lists;
    }

2 个答案:

答案 0 :(得分:1)

试试这个:

  $query = "SELECT * FROM list AS l
                INNER JOIN listUser AS lu
                ON l.listId = lu.listId
                WHERE l.userId = :user";

    $stmt = $this->m_db->Prepare($query);

    $stmt->bindParam(':user', $userId);

来源:http://php.net/manual/en/pdo.prepared-statements.php

答案 1 :(得分:0)

结果集中有10列,但您只绑定其中的6列。

而不是SELECT *,明确命名要选择的列更安全。