我正在做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?
答案 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";