![](/img/trans.png)
[英]CALLing a mySQL Stored Procedure from a PHP script - no error but not executing?
[英]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.