重命名mysql表头

时间:2015-01-18 01:23:24

标签: php mysql

更新(要求的代码):

$result = mysql_query('SELECT * FROM `some_table`'); 
if (!$result) die('Couldn\'t fetch records'); 
$num_fields = mysql_num_fields($result); 
$headers = array(); 
for ($i = 0; $i < $num_fields; $i++) 
{     
       $headers[] = mysql_field_name($result , $i); 
} 
$fp = fopen('php://output', 'w'); 
if ($fp && $result) 
{     
   header('Content-Type: text/csv');
   header('Content-Disposition: attachment; filename="export.csv"');
   header('Pragma: no-cache');    
   header('Expires: 0');
   fputcsv($fp, $headers); 
   while ($row = mysql_fetch_row($result)) 
   {
      fputcsv($fp, array_values($row)); 
   }
die; 

}

$result = mysql_query('SELECT who, phonenumber, notes, location FROM `phpbb_phonelist` WHERE `activenumber` = 1');  
if (!$result) die('Couldn\'t fetch records'); 

我试图改变谁,电话号码,音符和位置的标题。我尝试过使用as语句(见下文),但它在标题中创建了换行符:

$result = mysql_query('SELECT who as "Test1", phonenumber as "Test 2", notes as "Test 3", location as "Test 4" FROM `phpbb_phonelist` WHERE `activenumber` = 1');  
if (!$result) die('Couldn\'t fetch records'); 

以上输出:

who,"Phone  Number",notes,location

3 个答案:

答案 0 :(得分:0)

你的代码按原样运行......基本上......我只是改变了选择。其余的都一样。

$result = mysql_query('SELECT table_id as "Table ID", table_value as "Table Value", table_char as "Table Char"  FROM `tablename`');

if (!$result) die('Couldn\'t fetch records');

$num_fields = mysql_num_fields($result);
$headers = array();

for ($i = 0; $i <$num_fields; $i++) {
   $headers[] = mysql_field_name($result , $i);
}

$fp = fopen('php://output', 'w');

if ($fp && $result) {
       header('Content-Type: text/csv');
       header('Content-Disposition: attachment; filename="export.csv"');
       header('Pragma: no-cache');
       header('Expires: 0');
       fputcsv($fp, $headers);
       while ($row = mysql_fetch_row($result))
       {
          fputcsv($fp, array_values($row));
       }
    die;
}

在csv中给我这个输出:

Table ID    Table Value      Table Char
1           one              o
2           two              t

来自此表:

mysql> select * from tablename;
+----------+-------------+-----------+------------+
| table_id | table_value | table_int | table_char |
+----------+-------------+-----------+------------+
|        1 | one         |        11 | o          |
|        2 | two         |        22 | t          |
+----------+-------------+-----------+------------+
2 rows in set (0.00 sec)

这是我的其他一个答案的PDO示例...它使用参数绑定,因此您不会遭受基本的SQL注入攻击。

<?php

// print_r($_POST); 

$dsn  = 'mysql:host=localhost;dbname=test';   
$user = 'root';
$pass = ''; 

$db = new PDO($dsn, $user, $pass);

$id      = isset($_POST['id'])    ? $_POST['id']    : ''; 
$value   = isset($_POST['value']) ? $_POST['value'] : '';  

if (!empty($id) && !empty($value)) {

   $query = "update my_table set value = ? where table_id = ? "; 
   $stmt  = $db->prepare($query);

   // run the query and bind the values 
   $success = $stmt->execute(array($value,$id));

   if ($success) echo "it worked!";
            // else echo "it did not work...!"; 
            else echo $stmt->errorInfo()[2];
}
else echo "post params were blank"; 

?>

this answer显示了如何使用PDO获取列名...

$rs = $db->query('select * from tablename');

for ($i = 0; $i < $rs->columnCount(); $i++) {
    $col = $rs->getColumnMeta($i);
    $columns[] = $col['name'];
}

print_r($columns);

(男人......我不知道我对新的StackOverflow CSS的看法......一切都不同而且很奇怪......)

答案 1 :(得分:0)

我不确定我是否了解您所报道的问题(我已经在我的&#34;回答&#34;以及那句话的前提下,以防我不理解你问的问题。)

转义标识符的默认字符是反引号。鉴于您在查询中使用了一些标识符的反引号,您似乎对此有所了解。

您似乎也明白,您可以通过使用AS aliasname跟随SELECT列表中的表达式为结果集中的列指定别名。

不明确的原因是您在分配的别名周围使用双引号。 (您可以将SQL_MODE变量设置为包含ANSI_QUOTES,在这种情况下,双引号可以正常工作。但是如果没有这个设置,我认为您需要在任何标识符周围使用反引号(包括列别名),它们是非限定保留字或包含特殊字符的空格。

如果您在别名周围使用了反引号,例如:

SELECT p.who           AS `Test1`
     , p.phonenumber   AS `Test 2`
     , p.notes         AS `Test 3`
     , p.location      AS `Test 4`
  FROM `phpbb_phonelist` p
 WHERE p.activenumber = 1

然后,这些别名将在查询返回的结果集的元数据中返回。这些将是结果集中列的名称。

 SELECT t.table_id    AS `Table ID`
      , t.table_value AS `Table Value`
      , t.table_char  AS `Table Char`
   FROM `tablename` t
  ORDER BY t.table_id

(我们通常包含一个ORDER BY来使结果集更具确定性。)


我很困惑你为什么要使用已被弃用的mysql接口,而不是使用mysqli或PDO。

答案 2 :(得分:0)

不,我不这么认为。

首先取消标题&#34;重命名mysql表格标题&#34;毫无意义。

内容处置不是有效的HTTP 1.1标准。

请参阅Uses of content-disposition in an HTTP response header

附件?这是电子邮件吗?看起来不像一个。

Expires:0;

来自W3C RFC 2616 Sec。 14.21:格式是绝对日期和时间,由第3.3.1节中的HTTP-date定义;它必须采用RFC 1123日期格式:

&#34; die&#34;是什么?