我有一个来自“SHOW表”查询的对象。不幸的是,我得到一个对象内部的数组,其名称会根据用户的登录情况而变化(例如data [1] .Tables_in_ kazura )。我怎样才能访问用户登录的内容,甚至更好地将结果从PHP重命名,从Tables_in_xxx到我想要的任何内容?
$.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);
echo $结果给了我:
Object { Tables_in_kazura: "drinks" }
Object { Tables_in_kazura: "food" }
以及用户(这里的用户 kazura )的其他任何东西都在他的表格中。
由于它基于用户名,因此Tables_in_ USERNAME 会有所不同,我不知道如何访问其中的数据。
最佳解决方案是echo json_encode($result);
返回Object { categoryname: "drinks" }
等等,无论用户登录了什么
答案 0 :(得分:0)
如果这些表都具有相同的结构,那么您可以使用原始SQL,但实际上并不建议这样做,因为它会让您受到攻击。问题似乎是您每个用户使用一个表而不是遵循关系约定。但作为简短的回答,您无法在已清理的SQL查询中执行您正在寻找的内容,因为不支持动态表名。
答案 1 :(得分: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;
});
我将所有对象键重命名为categoryname,而不是更改SQL查询。