簡體   English   中英

從PHP腳本調用的MySQL存儲過程未返回結果

[英]MySQL stored procedure called from PHP script not returning results

我有一個要由php執行的存儲過程,實際的SQL輸出在我的SQL管理器[SQLYog]中工作正常,但在PHP腳本中未返回任何結果。

閱讀文檔后,看來我必須聲明一些OUT變量才能使其正常工作,盡管我已經做了-但它仍未返回結果。

請參閱下面的代碼:

while ($row = $results->fetch(PDO::FETCH_ASSOC)) {

    $depth = $parentDepth;

    $cid = $row['id'];

    $ultimatesql = "DROP PROCEDURE IF EXISTS getParentArray;

    CREATE PROCEDURE getParentArray(IN cid INT, IN target INT, OUT parent_id_array VARCHAR(255), OUT my_parent VARCHAR(255))

    BEGIN

        DECLARE pid INT;
        DECLARE parent_id_array VARCHAR(255) DEFAULT '';
        DECLARE my_parent VARCHAR(255) DEFAULT '';

        REPEAT

            SET pid = (SELECT `sc`.`parent` FROM `modx_site_content` `sc` WHERE `id` = cid);

            SET parent_id_array = CONCAT(pid,',',parent_id_array);

            SET cid = pid;

        UNTIL cid = 0 END REPEAT;

        SET my_parent = (SELECT SUBSTRING_INDEX((SELECT SUBSTRING_INDEX(parent_id_array, ',', target)), ',', -1));

        IF my_parent = '' 

            THEN SET my_parent = -1; 

        END IF;

        SELECT parent_id_array , target , my_parent;

    END;

    CALL getParentArray($cid, $depth, @out_a, @out_b);";

$statement = $modx->prepare($ultimatesql);

// The SQL echoed here works - results get returned if pasted into SQL studio 
echo '<pre>';print_r($statement);echo '</pre>';

$statement->execute();


while($result = $statement->fetch(PDO::FETCH_ASSOC)){

    // no results get returned here, 
    echo '<br> my result = ' . print_r($result);echo '<br>';

}

}

我沒有看到自己在做錯什么,為什么不返回記錄集呢?

看起來Fabricator靠的是對的錢-如果我像這樣把它拆開,那么一切都很好[盡管看起來有點混亂:(]

$drop_proc = "DROP PROCEDURE IF EXISTS getParentArray;";

$create_proc = " CREATE PROCEDURE getParentArray(IN cid INT, IN target INT, OUT parent_id_array VARCHAR(255), OUT my_parent VARCHAR(255))

    BEGIN

        DECLARE pid INT;
        DECLARE parent_id_array VARCHAR(255) DEFAULT '';
        DECLARE my_parent VARCHAR(255) DEFAULT '';

        REPEAT

            SET pid = (SELECT `sc`.`parent` FROM `modx_site_content` `sc` WHERE `id` = cid);

            SET parent_id_array = CONCAT(pid,',',parent_id_array);

            SET cid = pid;

        UNTIL cid = 0 END REPEAT;

        SET my_parent = (SELECT SUBSTRING_INDEX((SELECT SUBSTRING_INDEX(parent_id_array, ',', target)), ',', -1));

        IF my_parent = '' 

            THEN SET my_parent = -1; 

        END IF;

        SELECT parent_id_array , target , my_parent;

    END;";

$run_proc = "CALL getParentArray($cid, $depth, @out_a, @out_b);";


// drop the proc if exists
$drop_statement = $modx->prepare($drop_proc);

$drop_statement->execute();


// create a new one
$create_statement = $modx->prepare($create_proc);

$create_statement->execute();


// run it!
$run_statement = $modx->prepare($run_proc);

$run_statement->execute();


while($result = $run_statement->fetch(PDO::FETCH_ASSOC)){
    // now this works
    echo '<br> my result = ' . print_r($result);echo '<br>';

}

暫無
暫無

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

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