Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL到CSV-如何将列标题与选定列匹配_Php_Mysql - Fatal编程技术网

Php MYSQL到CSV-如何将列标题与选定列匹配

Php MYSQL到CSV-如何将列标题与选定列匹配,php,mysql,Php,Mysql,在这一点上,我将是空的,并且可能需要一些洞察力 我试图只选择某些列名称(而不是列数据)设置为CSV文件的标题 现在,我只能用 $result=mysql\u查询(“显示来自“..$table”的列) 问题是它会提取所有的列名,而我只需要某些列的数据。要获取数据值,此查询工作正常: $values=mysql\u query(“从“$table.”中选择“$columns.”,其中channel\u id=26”) 例如,如何选择或仅显示我在$columns中列出的列的列名 编辑-我在这里添加完

在这一点上,我将是空的,并且可能需要一些洞察力

我试图只选择某些
列名称
(而不是列数据)设置为CSV文件的标题

现在,我只能用
$result=mysql\u查询(“显示来自“..$table”的列)

问题是它会提取所有的列名,而我只需要某些列的数据。要获取数据值,此查询工作正常:

$values=mysql\u query(“从“$table.”中选择“$columns.”,其中channel\u id=26”)

例如,如何选择或仅显示我在
$columns
中列出的列的列名


编辑-我在这里添加完整的PHP以提供更多上下文。第七行是我的问题

<?php

$table = 'exp_channel_data'; // table we want to export
$columns = 'entry_id, field_id_26, field_id_27, '; // only the columns we want to show
$file = 'registrations-from-web'; // csv name.

$result = mysql_query("SHOW COLUMNS FROM ".$table);
$count = mysql_num_rows($result);

$csv_output = "";

if ($count > 0)
{
    while ($row = mysql_fetch_assoc($result))
    {
        $csv_output .= $row['Field'].", ";
    }
}

$csv_output .= "\n";
$values = mysql_query("SELECT ".$columns." FROM ".$table." WHERE channel_id=26");
while ($rowr = mysql_fetch_row($values))
{
    for ($j=0; $j<$count; $j++)
    {
        $csv_output .= $rowr[$j].", ";
    }

    $csv_output .= "\n";
}

$filename = $file."_".date("d-m-Y_H-i",time());

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");

print $csv_output;

exit;

?>

如果您知道列的名称,您可以添加它们和/或直接从数组打印它们。 如果您仍然想访问从查询中检索到的内容,可以
$result=mysql\u fetch\u assoc($values)每行,键将始终包含列的名称,因为生成的数组是关联的

尝试:

了解结果数组的内容

现在试试:

$first = 1;
echo '<table>';
while ($assoc = mysql_fetch_assoc($values))
{
    echo '<tr>';
    if ($first)
    {   
        foreach ($assoc as $key => $value)
            echo "<th>$key</th>\n";
        $first = 0;
    }   
        else
    {   
        foreach ($assoc as $key => $value)
            echo "<td>$value</td>\n";
    }   
    echo '</tr>';
}
echo '</table>';

foreach是故意重复的,因此此示例更清晰。

您可以查询用户选项卡列表以获取表列元数据

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'yourTableName'

我不知道为什么我会错过这个,但是因为我已经列出了我需要的列,我只需要把这个字符串转换成一个数组,让它工作

$column\u names=数组($columns)
然后以后使用
$csv_输出。=''''.$rowr[$j].''.','


这在不重做我的全部代码的情况下工作得非常好。

因此您可能正在使用SQL server-对于SQL server,请使用此

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = (SELECT id FROM sysobjects WHERE type = 'V' AND [Name] = 'Your table name')

Type='V'表示视图Type='U'表示表

do
$columns=“column1\U i\U-want,column2\U-i\U-want,column3\U-i\U-want”
?我有它,但我如何将它用于列名?什么是合适的查询?我试过的东西都不管用。好吧,这给了我
数组([entry\u id]=>250[field\u id\u 26]=>1
等等……那么我如何从该数组中获取
列名呢?我在原始代码中有所有这些。我将更新我的问题以包含完整的PHP。我感谢您的帮助。这将打印一个表,其中第一行数据将被列名替换。当我尝试将其用于CSV输出时,CSV是空白。@StephenC.检查我的编辑,最后一个示例将打印一个CSV文件作为正常输出。@Cory.Nope.这不起作用,最后没有回答我的问题。我感谢user1598585的帮助,但最后他只给了我所有我在很多博客和how-tos中看到的我不感兴趣的新代码。这给出了一个错误:Table'myTableName.USER\t“AB_列”不存在。如果没有错误,则不会进行筛选,因此无论如何这都不会起作用。这样做很糟糕。如果其中一个结果包含逗号怎么办?@Cory,已编辑以回答您的问题。如果它包含
?非常感谢您的帮助。谢天谢地,我已经找到了解决方案,但我相信这会有所帮助。谢谢!
SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'yourTableName'
SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = (SELECT id FROM sysobjects WHERE type = 'V' AND [Name] = 'Your table name')