从存储过程中检索id以调用嵌套过程-PHP和MYSQL
我需要调用第一个过程(CrushProps),然后通过调用第二个过程(CrushOutcomes)循环每一行,该过程在第一个过程的结果行中使用一个值(PropId)(并返回新过程中的所有行) 我已经考虑过这个问题,但无法让它对我起作用: 以下是两个存储过程:从存储过程中检索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
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
保存到一个数组中,然后在该数组上循环执行第二次查询。