更新(要求的代码):
$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
答案 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;是什么?