我正在尝试制作一个存储过程,该过程将接受从PHP发送来的数据,以将一个或多个图像存储在名为“ imagenes”的MySQL表中。
表结构(用西班牙语,但用英语完全可以理解):
+-------------+------------------------------------------+
|imagenes | |
+-------------+------------------------------------------+
|imagenAlbumId|Primary Key INT NN doesn't auto-increment |
+-------------+------------------------------------------+
|imagenId |Primary Key INT NN doesn't auto-increment |
+-------------+------------------------------------------+
|imagenData |BLOB NN |
+-------------+------------------------------------------+
|imagenCreada |DATETIME NN |
+-------------+------------------------------------------+
每个“相册”都是与单个项目/事件有关的集合,许多图像通过相同的albumId连接,这就是为什么我不希望字段自动递增的原因,ID逻辑将在PHP的PHP方面东西。
一般的想法是,图像与其他事件/对象相关,因某种不当行为而被引用的员工将在其记录中添加一行,其中可以包含该事件的图像,该事件是单个的,但可以包含许多图像。
一个产品可以有多个图像,这就是为什么我选择这种设计。
我要实现的目标是能够通过单个HTML输入
<input type="file" name="img" multiple>
上传多个图像这将被发送到一个PHP文件,该文件创建一个数组,然后使用每个文件的准备好的语句对MySQL执行“ CALL”。
image [0]和image [1]等将调用过程new_album_upload(image_number,image_data),该过程如下所示:
DROP PROCEDURE IF EXISTS new_album_upload;
DELIMITER $$
CREATE PROCEDURE new_album_upload (IN image_number INT, IN image_data BLOB)
BEGIN
IF image_number = 0 THEN SET @album_id = MAX(imagenes.imagenId)+1;
ELSE SET @album_id = MAX(imagenes.imagenAlbumId);
END IF;
INSERT INTO imagenes (imagenalbumid, imagenid, imagendata, imagencreada)
VALUES (@album_id, image_number, image_data, NOW());
END $$
DELIMITER;
这个想法是PHP将遍历数组,分析每个文件,如果有效发送,则image [0]将是第一个文件,并将触发IF返回TRUE,从而将@album_id设置为最高条目的+1,因此到目前为止,PHP发送的下一个图像将是image [1],因此会将@album_id设置为该列中的最大值,从而重复image [0]的专辑ID。
我显然在做错事,因为该过程存储良好,但是当我尝试调用它时,我收到一条错误消息#1111“无效使用组函数”,从我读过的类似问题上来看,它与使用MAX有关(),但我所看到的所有问题都在谈论WHERE的用法,在这种情况下,我不会使用它。
也许也很相关:我正在为此使用PHPmyAdmin,并通过内置的模式菜单执行该过程,执行时它查询以下内容:
SET @p0='0';
SET @p1='IMAGE 1-1';
CALL `new_album_upload`(@p0, @p1);
在这种情况下,我要实现的目标是否可行(甚至合乎逻辑)?我使用了错误的方法还是我在搞一些语法问题?
我对数据库的经验为零,并且我正在学习中,因此很有可能我以某种方式倒退了这一点,并且我愿意接受有关不同方法的建议。
我尝试使用存储过程的原因是也没有调用MySQL来查看下一个ID,然后使用新请求将其发送回去,所以我希望能够仅发送请求和数据,并让MySQL照顾它。
提前致谢。
最佳答案
错误#1111“无效使用组函数”
是的,显然,因为没有FROM
子句,并且您无法像下面的代码段那样获得MAX()
THEN SET @album_id = MAX(imagenes.imagenId)+1
您应该将其更改为
select @album_id = MAX(imagenId) + 1
from imagenes
(要么)
@album_id = (SELECT MAX(imagenId) + 1 from imagenes)
关于php - MySQL存储过程具有变量的第一步错误#1111,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44812613/