PHP/MySQL:在PHP多查询中将值从一个查询传递到另一个查询
我必须在一个PHP文件中执行3个查询。我使用了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
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
在执行时未定义。使用错误报告。