セキュリティ上の利点が追加されたため、mysqli への変換を開始したところです。ただし、mysqli に変換する主な理由はmysqli_multi_query
関数でした。多くの JOINS を含む長くて複雑なクエリがいくつかありましたが、この関数を知ったとき、すべてを個別のクエリに分割することで簡単にできると思いました。
しかし、クエリを思いどおりに動作させることができず、PHP マニュアルも役に立ちません。
これが私がこれまでに持っているものです。
$qry = "SELECT T.T_ID, T.name, T.pic, T.timestamp AS T_ts,
(SELECT COUNT(*) FROM track_plays WHERE T_ID = T.T_ID) AS plays,
(SELECT COUNT(*) FROM track_downloads WHERE T.T_ID = T_ID) AS downloads
FROM tracks T WHERE ID = '$ID';
";
$qry .= "SELECT S_ID, status, timestamp AS S_ts FROM status WHERE ID = '$ID';";
$qry .= "SELECT G_ID, gig_name, date_time, lineup, price, ticket, venue, G_pic, timestamp AS G_ts FROM gigs WHERE ID = '$ID'";
// Execute multi query
if (mysqli_multi_query($con,$qry)){
do {
// Store first result set
if ($result=mysqli_store_result($con)){
while ($row=mysqli_fetch_array($result)){
print_r($row);
}
}
}
while (mysqli_next_result($con));
}
これは正常に機能し、配列は期待どおりに出力されます。ただし、後で使用するために多くの変数を設定したいと考えています。すべての変数をリストするわけではありませんが、このような変数がいくつかあります。
$S_ID = htmlspecialchars($row['S_ID']);
$T_ID = htmlspecialchars($row['T_ID']);
$G_ID = htmlspecialchars($row['G_ID']);
変数は取得されますが、関数のループの性質により、$S_ID
または$G_ID
が定義されていないことを示す PHP エラーが表示されます。$T_ID
ループオーバーされていない最初のクエリであるため、未定義のエラーは発生しません。
さらに情報が必要な場合、または十分に説明していない場合は、お問い合わせください。