使用PHP将任何给定的MySQL SELECT查询显示为HTML表

使用PHP将任何给定的MySQL SELECT查询显示为HTML表,php,mysql,arrays,Php,Mysql,Arrays,示例查询1- SELECT ID,NAME FROM USERS 查询示例2- SELECT Orders.OrderID as ID, Customers.CustomerName as Name, Orders.OrderDate as Date FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID; 如何在PHP中将标题加载到数组中? 我是说 查询1中的ID、名称和查询2中的ID、名称和日

示例查询1-

SELECT ID,NAME FROM USERS
查询示例2-

SELECT Orders.OrderID as ID, Customers.CustomerName as Name, Orders.OrderDate as Date
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID; 
如何在PHP中将标题加载到数组中? 我是说 查询1中的ID、名称和查询2中的ID、名称和日期

这就是我要做的:

我正在创建一个PHP函数,从任何给定的MySQL Select查询自动生成HTML表

这就是我现在要做的

function createTable($query) {
    $sql_link = Connect_MySQLi_DB();// Database Connection
    $sql_link->set_charset("utf8");
    $result = $sql_link->query($query);
    $headings = array('ID','Name','Date');//I need this array to create automatically
    echo '<table>';
    echo '<tr>';
    for ($x = 0; $x <= (count($headings) - 1); $x++) {
        echo '<th>'.$headings[$x].'</th>';
    }
    echo '<tr>';
    while ($row = $result->fetch_object()) {
        echo '<tr>';
        for ($x = 0; $x <= (count($headings) - 1); $x++) {
            echo '<td>' . $row->$headings[$x] . '</td>';
        }
        echo '<tr>';
    }
    echo '</table>';
}
函数createTable($query){
$sql\u link=Connect\u MySQLi\u DB();//数据库连接
$sql\u link->set\u字符集(“utf8”);
$result=$sql\u link->query($query);
$headers=array('ID','Name','Date');//我需要自动创建这个数组
回声';
回声';
对于($x=0;$x fetch_object()){
回声';
对于($x=0;$x$标题[$x]。';
}
回声';
}
回声';
}
所以我需要自动创建$heading数组。
如果我能做到这一点,这个函数可以将任何MySQL Select查询显示为HTML表

,如果您使用的是mysqli,那么它似乎可以完成这项工作

编辑: 例如:

返回关于A.id列、A.A列和idd列的信息(两个表都有其他列)。为了缩短输出,我省略了一些字段

array(3) {
  [0]=>
  object(stdClass)#3 (13) {
    ["name"]=>
    string(2) "id"
    ["orgname"]=>
    string(2) "id"
    ["table"]=>
    string(1) "A"
    ["orgtable"]=>
    string(1) "A"
    // more fields here
  }
  [1]=>
  object(stdClass)#4 (13) {
    ["name"]=>
    string(1) "a"
    ["orgname"]=>
    string(1) "a"
    ["table"]=>
    string(1) "A"
    ["orgtable"]=>
    string(1) "A"
    // more fields here
  }
  [2]=>
  object(stdClass)#5 (13) {
    ["name"]=>
    string(3) "idd"
    ["orgname"]=>
    string(0) ""
    ["table"]=>
    string(0) ""
    ["orgtable"]=>
    string(0) ""
    // more fields here
  }
}

最后,这就是我如何使这个函数工作的(感谢Hynner的出色建议)

函数createTable\u from\u sql\u select\u query($query){
$sql\u link=Connect\u MySQLi\u DB();//数据库连接
$sql\u link->set\u字符集(“utf8”);
$result=$sql\u link->query($query);
//为旧PHP版本(fetch_fields())添加缺少的数组_列函数,true);
$headers=array_列($headers,'name');
$return='';
$return.='';
对于($x=0;$x fetch_object()){
$return.='';
对于($x=0;$x$标题[$x]。';
}
$return.='';
}
$return.='';
return$return;
}

现在,任何人都可以将任何SQL select查询转换为HTML表。

将一组键传递给函数并循环打印标题?或者,您可以在执行操作之前循环查询并使用正则表达式提取每个项的键。这是可能的,但实际上,我允许用户运行自己的SQL查询,因此这可能不是最好的是的,它实际上返回标题,但看起来它忽略了SQL查询中的语句。根据手册,它考虑了别名。(在代码< <代码>对象属性< /COD> >中检查<代码>名称>代码>和<代码> OrgNeX<代码>之间的区别。@cyberboy:我试过了,它在
name
字段中返回别名,在
orgname
字段中返回原始列名。
array(3) {
  [0]=>
  object(stdClass)#3 (13) {
    ["name"]=>
    string(2) "id"
    ["orgname"]=>
    string(2) "id"
    ["table"]=>
    string(1) "A"
    ["orgtable"]=>
    string(1) "A"
    // more fields here
  }
  [1]=>
  object(stdClass)#4 (13) {
    ["name"]=>
    string(1) "a"
    ["orgname"]=>
    string(1) "a"
    ["table"]=>
    string(1) "A"
    ["orgtable"]=>
    string(1) "A"
    // more fields here
  }
  [2]=>
  object(stdClass)#5 (13) {
    ["name"]=>
    string(3) "idd"
    ["orgname"]=>
    string(0) ""
    ["table"]=>
    string(0) ""
    ["orgtable"]=>
    string(0) ""
    // more fields here
  }
}
function createTable_from_sql_select_query($query) {
    $sql_link = Connect_MySQLi_DB();// Database connection
    $sql_link->set_charset("utf8");
    $result = $sql_link->query($query);

    // Adding Missing array_column Function for Old PHP Versions (<5.5)
    if (!function_exists('array_column')) {

        function array_column($array, $column) {
            $ret = array();
            foreach ($array as $row)
                $ret[] = $row[$column];
            return $ret;
        }

    }

    $headings = json_decode(json_encode($result->fetch_fields()), true);
    $headings = array_column($headings, 'name');

      $return = '<table>';
      $return .= '<thead><tr>';
      for ($x = 0; $x <= (count($headings) - 1); $x++) {
      $return .= '<th>' . ucwords(str_replace('_', ' ', (strtolower($headings[$x])))) . '</th>';
      }
      $return .= '</tr></thead><tbody>';
      while ($row = $result->fetch_object()) {
      $return .= '<tr>';
      for ($x = 0; $x <= (count($headings) - 1); $x++) {
      $return .= '<td>' . $row->$headings[$x] . '</td>';
      }
      $return .= '</tr>';
      }
      $return .= '</tbody></table>';

      return $return;
}