服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - mysql 存储过程的问题

mysql 存储过程的问题

2019-10-27 16:18mysql教程网 Mysql

最近我接触了一本php 与 mysql,老外写的一本书,书中有个tshirtshop网店代码,其中操作数据库的大多用的是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官方发过邮件,同样没答复。现今只能求助诸位高人。

延伸 · 阅读

精彩推荐
  • Mysql详解MySQL中的分组查询与连接查询语句

    详解MySQL中的分组查询与连接查询语句

    这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下 ...

    GALAXY_ZMY5442020-06-03
  • MysqlERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 2 ...

    MYSQL教程网6412020-03-13
  • Mysql解决MySQl查询不区分大小写的方法讲解

    解决MySQl查询不区分大小写的方法讲解

    今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    Veir_dev5592019-06-25
  • Mysqlmysql 不能插入中文问题

    mysql 不能插入中文问题

    当向mysql5.5插入中文时,会出现类似错误 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

    MYSQL教程网5722019-11-25
  • Mysql浅谈mysql 树形结构表设计与优化

    浅谈mysql 树形结构表设计与优化

    在诸多的管理类,办公类等系统中,树形结构展示随处可见,本文主要介绍了mysql 树形结构表设计与优化,具有一定的参考价值,感兴趣的小伙伴们可以参...

    小码农叔叔5242021-11-16
  • MysqlMySQL锁的知识点总结

    MySQL锁的知识点总结

    在本篇文章里小编给大家整理了关于MySQL锁的知识点总结以及实例内容,需要的朋友们学习下。...

    别人放弃我坚持吖4362020-12-14
  • MysqlMySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    逆心2972019-06-23
  • MysqlMySQL数据库varchar的限制规则说明

    MySQL数据库varchar的限制规则说明

    本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。 ...

    mysql技术网4192019-11-23