PHP/MySQL:在PHP多查询中将值从一个查询传递到另一个查询

PHP/MySQL:在PHP多查询中将值从一个查询传递到另一个查询,php,mysql,Php,Mysql,我必须在一个PHP文件中执行3个查询。我使用了mysqli\u multi\u query()。前两个查询是SELECT查询,为第三个查询(INSERT)返回值。到目前为止,我已经做到了这一点 <?php $host = "localhost"; $user = "smartbusarrival_grouplog"; $password = "group10@10"; $db = "smartbusarrival_sbaDB"; $u_id = 51; $b_id = 1; $t_id

我必须在一个PHP文件中执行3个查询。我使用了
mysqli\u multi\u query()
。前两个查询是SELECT查询,为第三个查询(INSERT)返回值。到目前为止,我已经做到了这一点

<?php

$host = "localhost";
$user = "smartbusarrival_grouplog";
$password = "group10@10";
$db = "smartbusarrival_sbaDB";

$u_id = 51;
$b_id = 1;
$t_id = 1;
$date = '2017-06-30';
$startHalt = "Kaduwela";
$endHalt = "Nugegoda";

$seats = array(42,43);

$con = mysqli_connect($host,$user,$password,$db);

$query = "CALL getHaltTag('$t_id','$startHalt');";
$query .= "CALL getHaltTag('$t_id','$endHalt');";
$query .= "INSERT INTO reservation (user_id,bus_id,trip_id,date,start,end) values ('$u_id','$b_id','$t_id','$date','$startTag','$endTag')";

if(mysqli_multi_query($con, $query)){
    do{
        if($result = mysqli_store_result($con)){
            while ($row = mysqli_fetch_array($result)){
                $startTag = $row[0];

                $endTag = $row[1];  

            }
            mysqli_free_result($result);
        }           
    }
    while (mysqli_next_result($con));
}   

mysqli_close($con);
?>

您不能对此使用多重查询,因为在执行设置变量的获取之前,您正在将变量替换到第三个查询中。只需将它们作为单独的查询来执行

$query = "CALL getHaltTag('$t_id','$startHalt');";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_row($result);
$startTag = $row[0];

$query = "CALL getHaltTag('$t_id','$endHalt');";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_row($result);
$endTag = $row[0];

$query = "INSERT INTO reservation (user_id,bus_id,trip_id,date,start,end) values ('$u_id','$b_id','$t_id','$date','$startTag','$endTag')";
mysqli_query($con, $query);
一般来说,很少有真正需要多查询的情况,这通常会使代码复杂化

如果将
getHaltTag
从存储过程更改为存储函数,则不需要3个单独的查询。您可以在调用函数的单个查询中执行此操作:

$query = "INSERT INTO reservation (user_id,bus_id,trip_id,date,start,end) 
        values ('$u_id','$b_id','$t_id','$date',getHaltTag('$startHalt'),getHaltTag('$endHalt'))";

表示了解的语句。即使是这样也不安全<代码>$startTag
$endtag
在执行时未定义。使用错误报告。