2017-04-16 9 views
0

私は2つのカラム(id、name)を持つSQLテーブル(モジュール)を持っています。これからPHPスクリプトを通して行を取得することができますが、私が望むのは、キーとしてidの値を使用し、値としてnameの値を多次元配列で使用することです。次に、それらをJSONにエンコードし、キー/値の関係を保持したいと考えています。私は何か一緒に混乱しましたが、nullを返します。PHP配列のSQLクエリー結果を平滑化

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(); 
} 

からの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); 

機能から該当するコードは、私は周りを見回しましたが、クエリの戻りがどのように私は単に「き」ではありませんよ新しい配列のキー/値に分解されます。もし誰かが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; 
} 

かなりありますし、それを呼び出してから、ちょうどあなたが本当に準備使用する必要があります返される配列

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

$response['modules'] = $modules; 

echo json_encode($response); 

をjson_encodeと、このようなSQLインジェクションを防ぐためにクエリをparamterised

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を追加するにはどうしたらよいですか?押す? – DarkMalice

+0

関数から返されたmodules配列を既存の '$ 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後に配置コードが実行されません。

関連する問題