簡體   English   中英

如何從存儲過程中獲取結果,該過程運行正常,但php返回null

[英]How to get result from stored procedure, the procedure runs fine but php returns null

我有一個在我的mysql服務器上運行的存儲過程,代碼如下:

DELIMITER $$
CREATE DEFINER=`present`@`%` PROCEDURE `InsertNewEventOrderItems`(IN `UserIDParam` INT, IN `Time` VARCHAR(255), IN `EventIDParam` INT, OUT `Result` VARCHAR(255))
    MODIFIES SQL DATA
BEGIN

    DECLARE OrderIDVar INT DEFAULT 0;

    IF (EXISTS(SELECT * FROM _newapp_shop_orders where UserID=UserIDParam AND Status='Open')) THEN

        SELECT OrderID INTO OrderIDVar FROM _newapp_shop_orders WHERE UserID=UserIDParam AND Status='Open';

        IF (NOT EXISTS(SELECT * FROM _newapp_shop_order_items WHERE OrderID=OrderIDVar AND EventID=EventIDParam)) THEN  

            -- User has open order so create a new order item!

            SELECT OrderID INTO OrderIDVar FROM _newapp_shop_orders WHERE UserID=UserIDParam AND Status='Open';

            INSERT INTO _newapp_shop_order_items (OrderID, EventID, ActivityID, Price, Amount) VALUES (OrderIDVar, EventIDParam, NULL, (SELECT Price FROM _newapp_shop_products_events WHERE EventID=EventIDParam), 1);

            -- SELECT 'InsertOrderItem' INTO Result;  

            SELECT ROW_COUNT() INTO Result;

        ELSE 

            UPDATE _newapp_shop_order_items SET Amount=Amount + 1 WHERE OrderID=OrderIDVar AND EventID=EventIDParam;

            -- SELECT 'UpdateOrderItem' INTO Result;

            SELECT ROW_COUNT() INTO Result;

        END IF;


    ELSE 

        -- User has no open order so create a new order!

        INSERT INTO _newapp_shop_orders (UserID, Created, Modified) VALUES (UserIDParam, Time, Time);

        SELECT OrderID INTO OrderIDVar from _newapp_shop_orders where UserID=UserIDParam AND Status='Open';

        IF (NOT EXISTS(SELECT * FROM _newapp_shop_order_items WHERE OrderID=OrderIDVar AND EventID=EventIDParam)) THEN  

            -- User has made a new order item so create a new order item!

            INSERT INTO _newapp_shop_order_items (OrderID, EventID, ActivityID, Price, Amount) VALUES (OrderIDVar, EventIDParam, NULL, (SELECT Price FROM _newapp_shop_products_events WHERE EventID=EventIDParam), 1);

            -- SELECT 'InsertOrderItem' INTO Result;  

            SELECT ROW_COUNT() INTO Result;  

        ELSE 
            -- User has made an existing order item so update the order item!

            UPDATE _newapp_shop_order_items SET Amount=Amount + 1 WHERE OrderID=OrderIDVar AND EventID = EventIDParam;

            -- SELECT 'UpdateOrderItem' INTO Result;

            SELECT ROW_COUNT() INTO Result;

        END IF;

    END IF;
END$$
DELIMITER ;

它插入新訂單,訂單商品或更新現有商品,它返回修改后的行以檢查插入是否成功。 當我在phpmyadmin中執行該過程時,它會導致插入的行很好,並在屬於的表中插入適當的行。 但是當我從php運行這個程序時,它只返回NULL,這是我的PHP代碼:

public function pushItemToCart($userID, $item)
    {
        $itemList = json_decode($item);
        if ($itemList->Type == 'events') {
            $sql = 'CALL `InsertNewEventOrderItems`(?, ?, ?, @Result)';
        } elseif ($itemList->Type == 'activities') {
            $sql = 'CALL `InsertNewActivityOrderItems`(?, ?, ?, @Result)';
        }

        if ($query = $this->DB->prepare($sql)) {
            $nowFormat = mktime(
                date('H'),
                date('i'),
                date('s'),
                date('m'),
                date('d'),
                date('Y')
            );

            $query->bind_param('isi', $userID, $nowFormat, $itemList->Id);

            $query->execute();

            $query->next_result();

            $select = $this->DB->query('SELECT @Result;');

            //$query->execute();

            $result = $select->fetch_assoc();

            $query->close();

            echo json_encode($result['@Result']);

            exit();
        } else {
            $error = $this->DB->errno . ' ' . $this->DB->error;

            echo json_encode('405'); // 1054 Unknown column 'foo' in 'field list'

            exit();
        }
    }

所以我希望結果是1或2或0

我通過刪除第二個執行並完全檢查錯誤的過程來解決它。 在主帖中糾正代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM