2017-04-16 57 views
0

我有一個SQL表(模塊)有兩列(id,name)。現在我可以通過PHP腳本從這裏獲取行,但是我想要的是在多維數組中使用id的值作爲鍵,name的值作爲值。然後我希望能夠將這些編碼成JSON,保留鍵/值之間的關係。我混淆了一些東西,但它返回null。展平PHP數組的SQL查詢結果

從index.php文件

 $mod1 = $core["module1"]; 
     $mod2 = $core["module2"]; 
     $modules = $db->getModulesById($mod1, $mod2); //module names & ids 

     $response["module"]["mod1"] = $modules[$mod1]; 
     $response["module"]["mod2"] = $modules[$mod2]; 
     $response["module"]["mod1name"] = $modules[$mod1]["name"]; 
     $response["module"]["mod2name"] = $modules[$mod2]["name"]; 
     echo json_encode($response); 

功能相關的代碼DB_Functions.php

public function getModulesById($mod1, $mod2) { 
    require_once 'include/Config.php'; 
    $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD); 
    // Check connection 
    if (!$con) 
     { 
     die("Connection error: " . mysqli_connect_error()); 
     } 
    // selecting database 
    mysqli_select_db($con, DB_DATABASE) or die(mysqli_connect_error()); 

    $query = "SELECT * FROM modules WHERE id= '$mod1' OR id='$mod2'"; 
    $result = mysqli_query($con, $query); 
    $arr = array(); 
    while($row = mysqli_fetch_assoc($result)) { 
     // process each row 
     //each element of $arr now holds an id and name 
     $arr[] = $row; 
    } 
    // return user details 
     return mysqli_fetch_array($arr); 
     close(); 
} 

我環顧四周,但我只是沒有「得到」查詢回報如何然後分解爲新數組的鍵/值。如果有人可以ELI5我會很感激。我只關心這個方面,這是一個個人項目,所以我現在還沒有關注安全問題,謝謝。

回答

1

你非常有

public function getModulesById($mod1, $mod2) { 
    require_once 'include/Config.php'; 
    $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); 
    // Check connection 
    if (!$con) { 
     die("Connection error: " . mysqli_connect_error()); 
    } 

    $query = "SELECT * FROM modules WHERE id= '$mod1' OR id='$mod2'"; 
    $result = mysqli_query($con, $query); 
    $arr = array(); 
    while($row = mysqli_fetch_assoc($result)) { 
     $arr[] = $row; 
    } 
    // here is wrong 
    //return mysqli_fetch_array($arr); 

    // instead return the array youy created 
    return $arr; 
} 

,並調用它,然後就json_encode返回數組

$mod1 = $core["module1"]; 
$mod2 = $core["module2"]; 
$modules = $db->getModulesById($mod1, $mod2); //module names & ids 

$response['modules'] = $modules; 

echo json_encode($response); 

你真的應該使用的準備和paramterised查詢,以避免SQL注入這樣的

public function getModulesById($mod1, $mod2) { 
    require_once 'include/Config.php'; 
    $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); 
    // Check connection 
    if (!$con) { 
     die("Connection error: " . mysqli_connect_error()); 
    } 

    $sql = "SELECT * FROM modules WHERE id= ? OR id=?"; 
    $stmt = $con->prepare($sql); 
    $stmt->bind_param('ii', $mod1, $mod2); 
    $stmt->execute(); 

    $result = $stmt->get_result(); 

    $arr = array(); 
    while($row = mysqli_fetch_assoc($result)) { 
     $arr[] = $row; 
    } 
    // here is wrong 
    //return mysqli_fetch_array($arr); 

    // instead return the array youy created 
    return $arr; 
} 
+0

如果我想將$ arr內容與其他數據一起添加到JSON中,請說出一個現有的數組$ response,我該如何將$ arr添加到$ response?推? – DarkMalice

+0

我修改了代碼,將函數返回的模塊數組添加到您現有的$ response數組中 – RiggsFolly

1

mysqli_fetch_array需要mysqli_query結果的結果。將構造的數組傳遞給mysqli_fetch_array()不會起作用。

如果您想要將某行中的某個特定值用作其鍵,則無法使用任何mysqli_ *函數解決此問題。但是你可以自己構建它:

while($row = mysqli_fetch_assoc($result)) { 
    // process each row 
    //each element of $arr now holds an id and name 
    $arr[$row['id']] = $row; 
} 

mysqli_close($con); 

return $arr; 

你應該關閉連接之前返回結果,定位在return後的代碼不會被執行。