簡體   English   中英

用 mysqli_query 的結果替換數組中的值

[英]Replace value in array with result of mysqli_query

我在使用 php 編碼時遇到了一些麻煩。 我想做的是以下內容:

  1. 創建一個數組 ($rows) 並用 mysqli_query ($query1) 的結果填充它 --> OK
  2. 對於該數組中的每個元素,將某個鍵 (pilot_rule_id) 的值替換為另一個 mysqli_query ($query2) 的結果。 (第二個查詢將返回一行,因為 Pilot 表的 id 是主鍵)。

到目前為止我有

$id = "96707ac6-ecae-11ea-878d-005056bbb446";
$rows = array();
$query1 = mysqli_query($con, "SELECT * FROM pilot_time_schedule WHERE pilot_id='$id'");
while($r = mysqli_fetch_assoc($query1)) {
    $rows[] = $r;
}
foreach($rows as $pilotRuleId) {
    $pilotRuleId->$pilot_rule_id;
    $query2 = mysqli_query($con, "SELECT name FROM pilot_rule WHERE id='$piloteRuleId'");
    while($r = mysqli_fetch_assoc($query2)) {
        $result[] = $r;
    }
// Don't know how to continue from here

你可以這樣:

$id = "96707ac6-ecae-11ea-878d-005056bbb446";
$stmt = $con->prepare('SELECT * FROM pilot_time_schedule WHERE pilot_id=?');
$stmt->bind_param('s', $id);
$stmt->execute();
$rows = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

foreach ($rows as $row) {
    $stmt = $con->prepare('SELECT name FROM pilot_rule WHERE id=?');
    $stmt->bind_param('s', $row['pilot_rule_id']);
    $stmt->execute();
    // replace with the `name` returned from the above statement.
    $row['pilot_rule_id'] = $stmt->get_result()->fetch_row()[0] ?? null;
}

但是,您確實應該學習 SQL 連接。 使用 SQL 連接可以避免對數據庫的 N+1 查詢。

$id = "96707ac6-ecae-11ea-878d-005056bbb446";
$stmt = $con->prepare('SELECT pilot_time_schedule.*,  pilot_rule.name
    FROM pilot_time_schedule 
    JOIN pilot_rule ON pilot_rule.id=pilot_time_schedule.pilot_rule_id
    WHERE pilot_id=?');
$stmt->bind_param('s', $id);
$stmt->execute();
$rows = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

foreach ($rows as $row) {
    echo $row['name']; // contains the name from pilot_rule
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM