Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从存储过程中检索id以调用嵌套过程-PHP和MYSQL_Php_Mysql_Stored Procedures - Fatal编程技术网

从存储过程中检索id以调用嵌套过程-PHP和MYSQL

从存储过程中检索id以调用嵌套过程-PHP和MYSQL,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我需要调用第一个过程(CrushProps),然后通过调用第二个过程(CrushOutcomes)循环每一行,该过程在第一个过程的结果行中使用一个值(PropId)(并返回新过程中的所有行) 我已经考虑过这个问题,但无法让它对我起作用: 以下是两个存储过程: DROP PROCEDURE IF EXISTS CrushProps $$ create procedure CrushProps(IN crID int) begin select props.PropText, props.Pro

我需要调用第一个过程(CrushProps),然后通过调用第二个过程(CrushOutcomes)循环每一行,该过程在第一个过程的结果行中使用一个值(PropId)(并返回新过程中的所有行)

我已经考虑过这个问题,但无法让它对我起作用:

以下是两个存储过程:

DROP PROCEDURE IF EXISTS CrushProps $$
create procedure CrushProps(IN crID int)
begin

select props.PropText, props.Prop_Id 
from props inner join crush_props on props.Prop_Id = crush_props.PropId
where crush_props.CrushId = crID;
end $$

DROP PROCEDURE IF EXISTS CrushOutcomes $$
create procedure CrushOutcomes(IN prID int)
begin

select prop_outcomes.OutcomeText, prop_outcomes.OutcomePoints  
from prop_outcomes inner join crush_props ON prop_outcomes.PropId = crush_props.PropId
WHERE prop_outcomes.PropId = prID;

end $$
作为PHP和MySQL的新手,我尝试了许多不同的变体,但没有任何运气。下面的代码按顺序运行这两个过程,并返回第一个过程中的所有行,但只返回第二个过程中的一行(以及完整结果之后,而不是每行之后)

我不知道如何使它循环通过第一个过程的每一行

$result = mysqli_query($con,"CALL CrushProps('$crushid')") or die("Query fail: " . mysqli_error());

if($result->num_rows > 0) 
{
  while($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
    {
   $prptxt = $row[PropText];
   $prpid = $row[Prop_Id];

    echo $prptxt . "<br/>"; 
    }

            $result->close();
            $con->next_result();
}


$result2 = mysqli_query($con,"CALL CrushOutcomes('$prpid')") or die("Query fail: " . mysqli_error());

if($result2->num_rows > 0) 
{
    while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC))
    {
   $outtxt = $row2[OutcomeText];
   $outpts = $row[OutcomePoints];

    echo $outtxt . "<br/>"; 

    }
}    
$result=mysqli_query($con,“调用CrushProps(“$crushid”))或die(“查询失败:”.mysqli_error());
如果($result->num_rows>0)
{
而($row=mysqli\u fetch\u数组($result,mysqli\u ASSOC))
{
$prptxt=$row[PropText];
$prpid=$row[Prop_Id];
echo$prptxt.“
”; } $result->close(); $con->next_result(); } $result2=mysqli_query($con,“调用CrushOutcomes(“$prpid”))或die(“查询失败:”.mysqli_error()); 如果($result2->num_rows>0) { 而($row2=mysqli\u fetch\u数组($result2,mysqli\u ASSOC)) { $OUTXT=$row2[OUTCOMEXT]; $outpts=$row[输出点]; echo$outtxt。“
”; } }
第二个过程返回了多少行?因为第二个
mysqli_query()
在第一个
mysqli_query()之后/之外,它将只调用
$prpid
的最后一个值。如果希望它执行所有
$prpid
值,则需要将其嵌套在第1个循环中。@JayBlanchard我得到四行,这是每个$prpid的行数。所以输出是正确的,但我只从第一个过程的一行中得到它。但我看到第/Row2行中有一个小错误,但这与我的问题无关。@Sean是的,我相信这是对的,但我无法在没有“命令不同步”或其他错误的情况下实现这一点。或者,您可以将
$prpid
保存到一个数组中,然后在该数组上循环执行第二次查询。