gpt4 book ai didi

php - mysqli 信号到 php 错误

转载 作者:行者123 更新时间:2023-11-30 22:15:53 25 4
gpt4 key购买 nike

<分区>

我有 Mysql 存储过程,在某些情况下会给出这样的信号错误:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertAction`(IN `EmployerID` INT, IN `StoreFromID` INT, IN `StoreToID` INT, IN `StoreID` INT, IN `ProductID` INT, IN `Quantity` DECIMAL(10,2), IN `DualOperation` TINYINT, IN `inOrOut` TINYINT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
START TRANSACTION;
SELECT @lastActionID;
SELECT @lastTransferID;
SELECT @retval;
SELECT SUM(ad.Quantity) INTO @retVal FROM productin pri JOIN actiondetails ad ON ad.ID=pri.ID;
IF DualOperation = 1
THEN
IF @retVal>Quantity
THEN
INSERT INTO Actions (EmployerID, StorehouseID, `Date`)
VALUES (EmployerID, StoreFromID, CURDATE());
SET @lastActionID = (SELECT ID FROM Actions ORDER BY ID DESC LIMIT 1);
INSERT INTO ProductTransfer (ID, TransferType)
VALUES (@lastActionID, 0);

INSERT INTO ActionDetails (ID,ProductID, Quantity)
VALUES (@lastActionID, ProductID, Quantity);

SET @lastTransferID = (SELECT ID FROM ProductTransfer ORDER BY ID DESC LIMIT 1);
INSERT INTO Actions (EmployerID, StorehouseID, `Date`) VALUES (EmployerID, StoreToID, CURDATE());
SET @lastActionID = (SELECT ID FROM Actions ORDER BY ID DESC LIMIT 1);
INSERT INTO ProductTransfer (ID, TransferType, ParentID) VALUES (@lastActionID, 1, @lastTransferID);

INSERT INTO ActionDetails (ID,ProductID, Quantity)
VALUES (@lastActionID, ProductID, Quantity);
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Not enough materials';
END IF;
ELSE
INSERT INTO Actions (EmployerID, StorehouseID, `Date`)
VALUES (EmployerID, StoreID, CURDATE());
SET @lastActionID = (SELECT ID FROM Actions ORDER BY ID DESC LIMIT 1);
INSERT INTO ActionDetails (ID, ProductID, Quantity)
VALUES (@lastActionID, ProductID, Quantity);
IF InOrOut = 0
THEN
INSERT INTO ProductIn (ID, OrganizationID) values (@lastActionID, NULL);
ELSE
IF @retVal>Quantity
THEN
INSERT INTO ProductOut (ID, OrganizationID) values (@lastActionID, NULL);
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Not enough materials';
END IF;
END IF;
END IF;
COMMIT;
END

当我通过 Mysql 查询运行此代码时,一切似乎都运行良好。它发出“ Material 不足”的信号 IF @retVal<=Quantity并且没有插入任何记录(按原样工作)...但是当我从 PHP 调用这个过程时,它根本不会给出任何错误。没有插入任何行,但我无法收到通知失败的通知...这是 php 代码:

$mysqli->query("CALL `InsertAction`('6', '1', '2', '0', '13', '431243241', '1', '0')");

the $mysqli->sqlstate给出 0000 .我应该如何理解程序已完成或收到信号?

所以我真正想要的是,如果 @retVal<=Quantity然后给出 php 异常。此代码打印 "string"出:

try {
$mysqli->query("CALL `InsertAction`(6, 1, 2, 0, 13, 431243241, 1, 0)");
}
catch (Exception $e){
echo "string";
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com