使用PHP将任何给定的MySQL SELECT查询显示为HTML表
示例查询1-使用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、名称和日
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;
}