mysql phpmyadmin 存储过程_MySQL_mysql 存储过程的问题,一开始用phpMyAdmin来执行,后来 - phpStudy...

本文探讨了在MySQL中创建存储过程时遇到的问题,特别是涉及预处理语句的错误。作者尝试了两种存储过程版本,解析了错误并寻求帮助的过程,对于PHPMyAdmin与MySQL命令行的执行差异进行对比。读者将从中了解到如何处理SQL语法错误和预处理语句的使用技巧。
摘要由CSDN通过智能技术生成

mysql 存储过程的问题

一开始用phpMyAdmin来执行,后来出现一堆错误,后来去掉了begin,end之后可以正常执行,但要执行存储过程,在phpMyAdmn中不行,而在mysql命令行文本框中就可以。

接下来又遇到更难的问题,在存储过程中加入预处理语句,更不行了,在mysql命令行文本框下执行同样,下面的运行记录,给大家参考,能否有高手来帮助。

复制代码 代码如下:

mysql> CREATE PROCEDURE catalog_get_products_in_category(

-> IN inCategoryId INT, IN inShortProductDescriptionLength INT,

-> IN inProductsPerPage INT, IN inStartItem INT)

-> begin

-> SELECT p.product_id, p.name,IF(LENGTH(p.description) <= inShortProductD

escriptionLength, p.description,

-> CONCAT(LEFT(p.description, inShortProductDescriptionLength),'...')) AS

description, p.price, p.discounted_price, p.thumbnail

-> FROM product p INNER JOIN product_category pc ON p.product_id = pc.pro

duct_id

-> WHERE pc.category_id = inCategoryId

-> ORDER BY p.display DESC

-> LIMIT inStartItem;inProductsPerPage;

-> end$$

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that

corresponds to your MySQL server version for the right syntax to use near 'inSta

rtItem;inProductsPerPage;

end' at line 10

//原本的存储过程语句

EATE PROCEDURE catalog_get_products_in_category(

IN inCategoryId INT, IN inShortProductDescriptionLength INT,

IN inProductsPerPage INT, IN inStartItem INT)

BEGIN

PREPARE statement FROM

"SELECT p.product_id, p.name,IF(LENGTH(p.description) <= ?, p.description,

CONCAT(LEFT(p.description, ?),'...')) AS description, p.price, p.discounted_price, p.thumbnail

FROM product p INNER JOIN product_category pc ON p.product_id = pc.product_id

WHERE pc.category_id = ?

ORDER BY p.display DESC

LIMIT ?, ?";

SET @p1 = inShortProductDescriptionLength;

SET @p2 = inShortProductDescriptionLength;

SET @p3 = inCategoryId;

SET @p4 = inStartItem;

SET @p5 = inProductsPerPage;

EXECUTE statement USING @p1, @p2, @p3, @p4, @p5;

END$$

mysql> delimiter $$

mysql> CREATE PROCEDURE catalog_get_products_in_category(

-> IN inCategoryId INT, IN inShortProductDescriptionLength INT,

-> IN inProductsPerPage INT, IN inStartItem INT)

-> BEGIN

-> PREPARE statement FROM

-> "SELECT p.product_id, p.name,IF(LENGTH(p.description) <= ?, p.descript

ion,

"> CONCAT(LEFT(p.description, ?),'...')) AS description, p.price, p.disco

unted_price, p.thumbnail

"> FROM product p INNER JOIN product_category pc ON p.product_id = pc.pro

duct_id

"> WHERE pc.category_id = ?

"> ORDER BY p.display DESC

"> LIMIT ?, ?";

-> SET @p1 = inShortProductDescriptionLength;

-> SET @p2 = inShortProductDescriptionLength;

-> SET @p3 = inCategoryId;

-> SET @p4 = inStartItem;

-> SET @p5 = inProductsPerPage;

-> EXECUTE statement USING @p1, @p2, @p3, @p4, @p5;

-> END$$

ERROR 1314 (0A000): PREPARE is not allowed in stored procedures

上面有两个存储过程,一个不用预处理语句,一个用了预处理语句,

之后,向作者发过邮件,没有答复,又给mysql官方发过邮件,同样没答复。现今只能求助诸位高人。相关阅读:

asp.net Ext grid 显示列表

ASP.NET 重定向的几种方法小结

CSS网页布局中表格制作实例

如何在PHP中使用Oracle数据库(5)

ASP.NET 路径问题的解决方法

javascript 删除dom对象的事件函数代码

div+CSS 兼容小摘

使用AjaxPro.Net框架实现在客户端调用服务端的方法

Linux市场一直没超越Windows的五大原因

PHP的XML分析函数

mysql仿asp的数据库操作类

ASP.NET2.0中控件的简单异步回调

php模拟post行为代码总结(POST方式不是绝对安全)

asp中"无限流"分页程序代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值