我正在尝试在phpmyadmin中编写一个商店程序,但是我得到了这个错误,我也在navicat中做了但是我得到了同样的错误,有人可以帮我解决吗?,帮助真的很感谢谢谢
#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'IN comienzo int,IN termino int'附近使用正确的语法。在第2行开始选择usuario.nombre,LEF'
这是我的商店程序:
CREATE PROCEDURE store(
IN actualUser varchar(20)
)
SET @comienzo2 = comienzo;
SET @termino2 = termino;
SET @actualUser2 = actualUser;
BEGIN
SELECT
usuario.nombre,
LEFT(titulo, 20) as titulo,
LEFT(mensaje, 20) as mensaje,
correo.fecha,
correo.id_correo,
correo_has_usuario.correo_id_correo,
correo_has_usuario.destinatario_id_usuario,
correo_has_usuario.eliminado,
correo_has_usuario.leido
FROM
correo_has_usuario
Inner Join correo ON correo_has_usuario.correo_id_correo =
correo.id_correo
Inner Join usuario ON usuario.id_usuario =
correo.usuario_id_usuario
WHERE
correo_has_usuario.destinatario_id_usuario = actualUser AND
correo_has_usuario.eliminado = 0 ORDER BY correo.fecha DESC
LIMIT comienzo,termino;
END$$
您好再次感谢您的回答我收到此错误消息#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在'SET @ termino2 = termino附近使用正确的语法; SET @ actualUser2 = actualUser; BEGIN PREPARE stmt'在第8行
答案 0 :(得分:1)
你错过了第2行VARCHAR的数据长度
例如 IN actualUser varchar(20)
您的限制声明也不正确,并会抛出错误。在存储过程中使用时,限制必须是数字或局部变量。参见
http://dev.mysql.com/doc/refman/5.5/en/select.html
在存储的程序中,可以使用指定LIMIT参数 从MySQL开始的整数值例程参数或局部变量 5.5.6。
要做到这一点,你必须将你的参数设置为像
这样的变量SET @comienzo2 = comienzo;
SET @termino2 = termino;
SET @actualUser2 = actualUser;
然后,不是简单地运行你的select语句,你必须准备它然后执行它。
PREPARE stmt FROM 'SELECT ... LIMIT ?, ?';
EXECUTE stmt USING @comienzo2, @termino2;
DEALLOCATE PREPARE stmt;
你的where声明也是如此。
示例:
DELIMITER $$
CREATE PROCEDURE store(
IN actualUser varchar(20),
IN comienzo int,
IN termino int
)
SET @comienzo2 := comienzo;
SET @termino2 := termino;
SET @actualUser2 := actualUser;
BEGIN
PREPARE stmt FROM 'SELECT
usuario.nombre,
LEFT(titulo, 20) as titulo,
LEFT(mensaje, 20) as mensaje,
correo.fecha,
correo.id_correo,
correo_has_usuario.correo_id_correo,
correo_has_usuario.destinatario_id_usuario,
correo_has_usuario.eliminado,
correo_has_usuario.leido
FROM
correo_has_usuario
Inner Join correo ON correo_has_usuario.correo_id_correo =
correo.id_correo
Inner Join usuario ON usuario.id_usuario =
correo.usuario_id_usuario
WHERE
correo_has_usuario.destinatario_id_usuario = ? AND
correo_has_usuario.eliminado = 0 ORDER BY correo.fecha DESC
LIMIT ?,?;'
EXECUTE stmt USING @actualUser2, @comienzo2, @termino2;
DEALLOCATE PREPARE stmt;
END;
$$