新手开发者求助:查询库存50-200的产品SQL语句报错排查
两段SQL语句的错误排查及修正
第一段SQL的错误
原代码:
$sql = "SELECT * FROM products ORDER BY (QUANTITY) WHERE QUANTITY = '200-50' DESC limit $start_from,$num_per_page";
- SQL子句顺序完全错误:正确语法顺序为
SELECT → FROM → WHERE → ORDER BY → LIMIT,你把ORDER BY放在了WHERE之前,违反语法规则。 - 条件逻辑错误:
QUANTITY = '200-50'是匹配库存等于字符串'200-50'的记录,和“50到200之间”的需求完全不符;且库存是数值类型,不需要加单引号。 - 排序语法错误:
DESC应紧跟排序字段,需写成ORDER BY QUANTITY DESC,而非放在条件后面。
第二段SQL的错误
原代码:
$sql = "SELECT * FROM products WHERE (QUANTITY) >='50' and (QUANTITY) <='200' $start_from,$num_per_page";
- 缺少分页关键字:
$start_from,$num_per_page是分页参数,必须用LIMIT关键字引导,直接拼接会导致语法报错。 - 数值字段多余单引号:QUANTITY是数值类型,比较时不需要用单引号包裹数值(虽部分数据库兼容,但不符合规范)。
正确的SQL写法
方式1:使用BETWEEN(更简洁)
$sql = "SELECT * FROM products WHERE QUANTITY BETWEEN 50 AND 200 ORDER BY QUANTITY DESC LIMIT $start_from, $num_per_page";
方式2:使用比较运算符
$sql = "SELECT * FROM products WHERE QUANTITY >= 50 AND QUANTITY <= 200 ORDER BY QUANTITY DESC LIMIT $start_from, $num_per_page";
额外建议:避免SQL注入
直接拼接变量到SQL语句存在注入风险,推荐使用预处理语句:
$stmt = $connection->prepare("SELECT * FROM products WHERE QUANTITY BETWEEN ? AND ? ORDER BY QUANTITY DESC LIMIT ?, ?"); $stmt->bind_param("iiii", 50, 200, $start_from, $num_per_page); $stmt->execute(); $result = $stmt->get_result();
内容的提问来源于stack exchange,提问作者ERNIE
相关产品推荐
相关产品推荐

