1

我收到错误消息"Integrity constraint violation: 1052 Column 'restaurant_id' in where clause is ambiguous' in"

a) 如何在 JOIN 上使用 bindparam?这甚至是导致此错误的问题吗?

function restaurant(PDO $dbh, $username) {
   global $dbh;
   $stmt = $dbh->prepare("
      SELECT        *
      FROM          users u
      INNER JOIN    menues m
      ON            u.user_id = m.restaurant_id
      INNER JOIN    users_slider s
      ON            m.restaurant_id = s.restaurant_id
      WHERE         restaurant_id = :restaurant_id
   ");

   $stmt->bindParam(":restaurant_id", $_GET['r']);
   $stmt->execute();
   return $stmt->fetchAll();
}
4

4 回答 4

10

改变

...
WHERE     restaurant_id = :restaurant_id

...
WHERE     m.restaurant_id = :restaurant_id
          ^^
于 2013-05-30T07:16:48.033 回答
2

请根据您的表格使用m.restaurant_ids.restaurant_id在条件下使用它将解决您的问题。

于 2013-05-30T07:17:20.160 回答
2

始终使用别名以避免连接查询中的冲突。这里restaurant_id应该是m.restaurant_id

试试这个查询: -

SELECT        *
      FROM          users u
      INNER JOIN    menues m
      ON            u.user_id = m.restaurant_id
      INNER JOIN    users_slider s
      ON            m.restaurant_id = s.restaurant_id
      WHERE         m.restaurant_id =:restaurant_id
于 2013-05-30T07:20:13.323 回答
1

将 where 条件放在 WHERE m.restaurant_id = :restaurant_id

function restaurant(PDO $dbh, $username) {
   global $dbh;
   $stmt = $dbh->prepare("
      SELECT        *
      FROM      users u
      INNER JOIN    menues m
      ON            u.user_id = m.restaurant_id
      INNER JOIN    users_slider s
      ON            m.restaurant_id = s.restaurant_id
      WHERE     m.restaurant_id = :restaurant_id
   ");

   $stmt->bindParam(":restaurant_id", $_GET['r']);
   $stmt->execute();
   return $stmt->fetchAll();
}
于 2013-05-30T07:18:48.653 回答