2017-05-15 9 views
0

「SHOWテーブル」クエリから取得するオブジェクトがあります。残念ながら、オブジェクト内の配列には、ユーザーがログインしていることに基づいて名前が変更されます(例:data [1] .Tables_in_ kazura)。どのユーザがログインしているかにアクセスするか、PHPの結果をTables_in_xxxから好きなものに変更する方が良いでしょうか?現在のユーザーにアクセスするにはjavascriptのユーザー名

$.getJSON("php/loadCategories.php", function(data) { 
    for (let i = 0; i < data.length; i++) { 
     console.log(data[i]); 
    } 
}); 

これはエコー$結果は私に与え、私のPHP

$sql = "SHOW tables"; 

    $rows = $db->query($sql); 
    $length = $rows->num_rows; 



    $result = array(); 
    for ($i = 0; $i < $length; $i++) { 
     $row = $rows->fetch_assoc(); 
     array_push($result, $row); 
    } 

    echo json_encode($result); 

です:
Object { Tables_in_kazura: "drinks" }
Object { Tables_in_kazura: "food" }

、これまで他に何のユーザ(ここでは、ユーザがカズラです)彼のテーブルにあります。

ユーザー名に基づいているため、Tables_in_ USERNAMEは変更されており、そのデータにどのようにアクセスできるかわかりません。

最適な解決策は、テーブルのすべてが同じ構造を持っている場合、これは本当にとしてお勧めできませんが、

+5

共有する_relevant_コードはありますか? ([mcve]を参照してください。) – evolutionxbox

+0

すでにデータの出力結果を出力変数に入れておきたいので、名前を付けることができます。したがって、console.log(data [i])ではな​​くconsole.log( 'Name_whatever_you_want' + output.categories [i])を実行できます。私があなたの質問を誤解した場合は、私に知らせてください。 – vabii

+0

申し訳ありませんが、コードスニペットの貼り付けが非常に難しかったです。私は今、動作しない不要な部分をすべて削除しました。 – Kazura

答えて

0

ログインしているユーザーに関係なく、上のecho json_encode($result);リターンObject { categoryname: "drinks" }ので、次にあなただけの生のSQLを使用することができるということでしょうあなたは攻撃のために開いたままになります。この問題は、リレーショナル・コンベンションに従うのではなく、ユーザーごとの表を使用しているようです。しかし、簡単な答えとして、ダイナミックテーブル名はサポートされていないので、サニタイズされたSQLクエリ内で探していることを行うことはできません。

0

私はjavascriptで私の欲しい結果を得る方法を考え出しました。それはかなりではありませんが、それは動作します。

let propertyName = Object.keys(data[1]).toString(); 

//Rename the query from Tables_in_USERNAME to categoryname 
data = data.map(function(obj) { 
    obj['categoryname'] = obj[propertyName]; 
    delete obj[propertyName]; 
    return obj; 
}); 

SQLクエリを変更する代わりに、すべてのオブジェクトキーの名前をcategorynameに変更します。

関連する問題