1.写SQL语句时语法没错误但是一直提示有错误
可能你的SQL语句中含有shift+空格键之后,输入的字符。
详细可看这篇文章:
2.写存储过程后,调用存储过程一直报语法错误
可能在你预处理封装的sql语句存在拼接问题:如LIMIT后面没加空格,就与数字拼接
CREATE DEFINER=`root`@`localhost` PROCEDURE `page_proc`(IN curp INT, IN per_page INT)
BEGIN
-- #
DECLARE total_records, total_page, start INT;
-- # 获取商品表总记录数
SELECT COUNT(*) INTO total_records FROM sh_goods;
-- #
IF per_page <= 1 THEN SET per_page = 3;
END IF;
-- #
SET total_page = CEIL(total_records / per_page); -- 总页数
-- #
IF curp < 1 THEN SET curp = 1;
ELSEIF curp > total_page THEN SET curp = total_page;
END IF;
-- #
SET start = (curp - 1)* per_page; -- 记录的偏移量
-- #
SET @sql_stmt = CONCAT('SELECT * FROM sh_goods LIMIT ', start, '\,', per_page); -- \,表示转义,
PREPARE paging FROM @sql_stmt;
EXECUTE paging;
DEALLOCATE PREPARE paging;
# 第2步:获取分页的数据
# ① 定义变量
-- DECLARE total_records, total_page, start INT;
# ② 从指定的数据表中获取总记录数
-- SELECT COUNT(*) INTO total_records FROM sh_goods;
# ③ 判断per_page是否符合要求
-- IF per_page <= 1 THEN SET per_page = 3;
-- END IF;
# ④ 根据total_records和per_page计算总页数
-- SET total_page = CEIL(total_records / per_page);
# ⑤ 判断curp是否符合要求
-- IF curp < 1 THEN SET curp = 1;
-- ELSEIF curp > total_page THEN SET curp = total_page;
-- END IF;
# ⑥ 计算记录的偏移量
-- SET start = (curp - 1) * per_page;
# ⑦ 根据分页获取数据
-- SET @sql_stmt = CONCAT('SELECT * FROM sh_goods LIMIT ', start,'\,' , per_page);
-- PREPARE paging FROM @sql_stmt;
-- EXECUTE paging;
-- DEALLOCATE PREPARE paging;
END