php - mysqli 信号到 php 错误

标签 php mysql mysqli signals

<分区>

我有 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";
}

最佳答案

MYSQLI 不会抛出异常,您必须使用老式的方法

$result = $mysqli->query("CALL InsertAction(6, 1, 2, 0, 13, 431243241, 1, 0)");
if ($result === false) {
    echo $mysqli->error;
    exit;
}

此外,第 6 个参数是小数 (10,2) 不是整数,您传递的数字不适合 10,2 如果我没记错的话,意思是小数点前 8 位和小数点后 2 位,所以请尝试一个数字很合身

 $result = $mysqli->query("CALL InsertAction(6, 1, 2, 0, 13, 4312432.41, 1, 0)");

关于php - mysqli 信号到 php 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309002/

相关文章:

php - 左连接重复项

mysqli - undefined variable : mysqli - PHP OOP

php - 将时间转换为秒

php - 有 CakePHP saveAll 函数来忽略错误并继续

php - 从这个 while 语句更新 mysql 行的正确 foreach 表达式是什么?

php - mysqli - fatal error

php检查文本输入长度并根据长度更改另一个输入

php - 使用 php 和 mysql 进行多个文件上传

php - 无法将 VAR 传递到 PDO SQL 查询中

mysql - #1064 - MySQL 错误