You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手开发者求助:查询库存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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:20:26