加载PRODUCT_TYPE ='汽车'并同时检查last_id更大的ID

时间:2017-01-09 05:42:19

标签: php mysql pdo

我正在做mutilevel网站所以我有2页;第1页是按类型选择,其他页面是品牌选择。

精通

typepage.html

.All
.cars
.bike
.computer

我将所有产品存放在一张桌子上 的数据库"产品"

ID, PRODUCT_NAME, PRODUCT_TYPE, PRODUCT_BRAND 

我正在使用ajax进入数据库并检查它,如果用户在类型页面中并单击全部它将获得所有PRODUCT_TYPE项目,但如果他们点击汽车,它将仅查找PRODUCT_TYPE ="汽车&#34 ;.但与此同时,我需要使用AJAX来进行无限加载,因此当用户向下滚动时,它会加载更多。

我添加以获取最后一个加载ID,以便我可以跟踪它们停止的位置。

sql加载所有

$this->sql = "SELECT * FROM $this->table WHERE ID > :last_id ORDER BY ID ASC LIMIT 0, :limit";

所以现在我可以将last_id数设置为0,它将加载7项数据,当向下滚动时,它将从7继续。

但是如果用户点击汽车而我还想向下滚动怎么办?数字会有所不同,因为数据库中的汽车商品ID可能为[1,5,6,7,8]。

sql加载类型

$this->sql = "SELECT * FROM $this->table WHERE ID > :last_id AND WHERE PRODUCT_TYPE='cars' ORDER BY ID ASC LIMIT 0, :limit";

这是函数_extract

# Get an associative array of results for the sql.

public function _extract($sql, $param_1, $param_2) {
    try {
        $stmt = $this->connection->prepare($sql);
        $stmt->bindParam(':last_id', $param_1, PDO::PARAM_INT);
        $stmt->bindParam(':limit', $param_2, PDO::PARAM_INT);
        $stmt->execute();

        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    } catch (Exception $e) {
        // Echo the error or Re-throw it to catch it higher up where you have more
        // information on where it occurred in your program.
        // e.g echo 'Error: ' . $e->getMessage();

        throw new Exception(
            __METHOD__ . 'Exception Raised for sql: ' . var_export($sql, true) .
            ' Params: ' . var_export($params, true) .
            ' Error_Info: ' . var_export($this->errorInfo(), true),
            0,
            $e
        );
    }
}

我有这个错误未定义的变量:params

所以我的问题是如何只加载PRODUCT_ITEM ='汽车'同时我检查last_id是否大于ID。

EXP typepage.html,用户点击car,它加载数据PRODUCT_TYPE =" car",现在是[1,4,5,9],当它向下滚动时,再次检查并加载ID大于9时间是PRODUCT_TYPE ="卡"。

我该如何编写SQL?

1 个答案:

答案 0 :(得分:1)

SQL语句不会生成错误消息。当系统尝试抛出自定义异常时抛出它。原因很简单(并在错误消息中明确说明)。您尝试使用未在任何地方定义的变量$ params。

      throw new Exception(
  __METHOD__ . 'Exception Raised for sql: ' . var_export($sql, true) .
  ' Params: ' . var_export($param_1, true) . ' ' . var_export($param_2, true) .
  ' Error_Info: ' . var_export($this->errorInfo(), true),
  0,
  $e);

现在回到你的SQL语句。语法不正确。 where关键字只允许一次。将其更改为:

$this->sql = "SELECT * FROM $this->table WHERE ID > :last_id AND PRODUCT_TYPE='cars' ORDER BY ID ASC LIMIT 0, :limit";