0
1つのPHPファイルの中で3つのクエリを実行する必要があります。私はmysqli_multi_query()
を使用しました。最初の2つのクエリは、3番目のクエリ(INSERT)の値を返すSELECTクエリです。これまで私はこれをしてきました。PHP/MySQL:PHPの複数のクエリで別のクエリに値を渡す
<?php
$host = "localhost";
$user = "smartbusarrival_grouplog";
$password = "[email protected]";
$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);
?>
最初の2つのクエリはうまく動作し、正解を返します。 新しいレコードを挿入するときにコードが正常に機能します。しかし、開始と終了の値はゼロです。
[Little Bobby](http://bobby-tables.com/)は*** [あなたのスクリプトはSQLインジェクション攻撃の危険性があると言います。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)*** [準備された]について学ぶ(http://en.wikipedia.org/ wiki/Prepared_statement)ステートメント([MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php))。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –
'$ startTag'と' $ endtag'は実行時に定義されていません。エラー報告を使用する。 – chris85