[英]how to use DB::unprepared() for mysql function and stored procedure in laravel 5.5 migration
阅读旧问题后,我尝试在迁移文件中使用DB :: unprepared()。 但是它只给我“遇到非数值”错误,数据库中没有任何变化。 但是,当我通过添加定界符将sql语句直接输入phpmyadmin时,它可以工作。 请建议我我所缺少的。
DB::unprepared('
CREATE FUNCTION getNextCustomSeq
(
sSeqName VARCHAR(50),
sSeqGroup VARCHAR(10)
) RETURNS VARCHAR(20)
BEGIN
DECLARE nLast_val INT;
SET nLast_val = (SELECT seq_val
FROM _sequence
WHERE seq_name = sSeqName
AND seq_group = sSeqGroup);
IF nLast_val IS NULL THEN
SET nLast_val = 1;
INSERT INTO _sequence (seq_name,seq_group,seq_val)
VALUES (sSeqName,sSeqGroup,nLast_Val);
ELSE
SET nLast_val = nLast_val + 1;
UPDATE _sequence SET seq_val = nLast_val
WHERE seq_name = sSeqName AND seq_group = sSeqGroup;
END IF;
SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,0)));
RETURN @ret;
END//
');
哦,这是一个错字。 您忘了逃避这一行:
SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,0)));
应该是:
SET @ret = (SELECT concat(sSeqGroup,\'-\',lpad(nLast_val,6,0)));
更新:
DB::unprepared('
CREATE FUNCTION getNextCustomSeq
(
sSeqName VARCHAR(50),
sSeqGroup VARCHAR(10)
) RETURNS VARCHAR(20)
BEGIN
DECLARE nLast_val INT;
SET nLast_val = (SELECT seq_val
FROM _sequence
WHERE seq_name = sSeqName
AND seq_group = sSeqGroup);
IF nLast_val IS NULL THEN
SET nLast_val = 1;
INSERT INTO _sequence (seq_name,seq_group,seq_val)
VALUES (sSeqName,sSeqGroup,nLast_Val);
ELSE
SET nLast_val = nLast_val + 1;
UPDATE _sequence SET seq_val = nLast_val
WHERE seq_name = sSeqName AND seq_group = sSeqGroup;
END IF;
SET @ret = (SELECT concat(sSeqGroup,\'-\',lpad(nLast_val,6,0)));
RETURN @ret;
END//
');
此处发生的是您没有逃脱引号,PHP认为您正在执行'long chunk of text' - 'long chunk of text'
,这当然会引发错误A non-numeric value encountered
。 此警告告诉您您正在尝试对一个或多个非数字字符串进行数学表达式: http : //php.net/manual/en/migration71.other-changes.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.