我想将我的mysql数据库的部分(和不同的排列)保存在CSV文件中.为此,我写了这段代码:
$headerDisplayed = false;
foreach ($arr as &$currName)
{
$result2 = mysql_query("SELECT * FROM Experiment Where Person='$currName'");
$i = 1;
while ($row2 = mysql_fetch_array($result2))
{
$list['Name'] = $currName;
$list['Studie'] = $row2['Studie'];
if(strcmp($row2['Antwort'],$row2['Korrekt']) == 0)
{
$list["A $i"] = '0';
}
else
{
$list["A $i"] = '1';
}
$i++;
}
if ( !$headerDisplayed ) {
// Use the keys from $data as the titles
fputcsv($fp, array_keys($list));
$headerDisplayed = true;
}
fputcsv($fp, $list);
}
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不是我想要的.我的计划是$list(eg $list["A 1"]或$list["A …
我有一个 PHP 脚本,可以将一些行写入 CSV 文件:
$fp = fopen($csv, 'w');
Run Code Online (Sandbox Code Playgroud)
我使用的模式,“W”,这样,如果不存在,它会创建的文件,但该文件将自动给予644个权限,即使我把777整个的/ var / www / html等/目录(不是一个好想法,但适合测试)。
如何写入文件并事先授予它权限?或者有没有更好的方法来授予写权限?
我有使用fputcsv编写csv文件的问题.它将页面html也放入csv文件中.我的代码有什么问题?
//Excel header
header("Content-Disposition: attachment; filename=\"Delivery_Reports.csv\";" );
header("Content-type: application/vnd.ms-excel");
$out = fopen("php://output", 'w');
$flag = false;
// $result = mysql_query("SELECT * FROM senderids ") or die('Query failed!');
//$sel="SELECT number as MobileNumber ,snum as Sender , msg as Subject ,crdate as Date ,status FROM savemsg WHERE userID='".$_SESSION['id']."' ".$str." ORDER BY sn DESC ";
$result = mysql_query("SELECT `count`, `dnd`, `credit`, `sender_id`, `to`, `message`, `status` FROM `reports` WHERE `unq_id` = '$dlr_id'");
while(false !== ($row = mysql_fetch_assoc($result))){
if(!$flag){
$list = array(
"Total"=>"Total",
"DND"=>"DND",
"Credits"=>"Credits", …Run Code Online (Sandbox Code Playgroud) 我编写了一个代码,我从DB中检索数据并使用函数'fputcsv'将它们填充到CSV中
我把以下内容放在首位:
$file = fopen("internal/customer_info.csv","w");
Run Code Online (Sandbox Code Playgroud)
然后我检索数据并将它们放在变量中,运行函数:
$customerInfo = $first_name.";".$last_name.";".$address1.";".$address2.";".$postcode.";".$city.";".$country.";".$email;
fputcsv($file,explode(';',$customerInfo));
Run Code Online (Sandbox Code Playgroud)
最后,我关闭了文件.
我的问题是:我怎么能用分号分隔符?如你所见,我有分号,但CSV输出没有.它显示了一个逗号.
为什么?谁能帮我?
我正在使用这个fputcsv代码:
$result = mysql_query('SELECT * FROM `mash`');
if (!$result) die('Couldn\'t fetch records');
$fp = fopen('testCSV.csv', 'w');
if ($fp && $result) {
while ($row = mysql_fetch_array($result)) {
fputcsv($fp, array_values($row));
}
die;
}
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
它输出的CSV很棒,但每个mysql列有两列(所以一切都加倍)
有谁能看出为什么会这样?
我正在寻找一种即时导出到 csv 的方法并遇到了这个问题。
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('path_to_file/file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
它只是取自 php.net 页面的基本代码。无论如何,在将它用于我自己的需要之前,我坚持尝试使用它。但我不断收到以下错误。
PHP Warning: fopen(path_to_file): failed to open stream
fputcsv() expects parameter 1 to be resource, boolean given
fclose() expects parameter 1 to be resource, boolean given
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会出现 fopen() 错误,因为我希望它无论如何都可以动态创建一个新文件,无论如何我认为它已经完成了?
假设这是一个文件权限错误是否安全?
此外,由于我使用了 php.net 页面中的确切代码,因此我假设由于 fopen() 问题而显示其他错误。
编辑。
看来我发布更多信息可能会更好。
涉及的班级。
class transData{
var $connection;
var $date;
var $data;
function __construct($date){ …Run Code Online (Sandbox Code Playgroud) 使用此代码,我创建了CSV导出文件:
foreach ($data_for_export as $row) {
$data = [];
array_push($data, $row->product_id);
array_push($data, $row->product_name);
array_push($data, $row->product_code);
array_push($data, $row->text);
fputcsv($file, $data);
}
fclose($file);
Run Code Online (Sandbox Code Playgroud)
示例输出是:
2131,"Toys set 35", TSSET35, "Lorem ipsum dolor sit amet"
Run Code Online (Sandbox Code Playgroud)
我尝试过:
preg_replace("/([a-z0-9]+)/i", '"$1"', $row->product_id)
'"'.$row->product_id.'"'
Run Code Online (Sandbox Code Playgroud)
使用"preg_replace",我会得到更多的引号,然后需要...
我需要所有出口物品的报价,我该怎么做?
我创建了一个脚本,将一堆 MySQL 表导出到 csv。脚本工作正常,只是我需要在将每一行放入 CSv 文件之前删除双引号。
我正在使用 str_replace,当我需要替换 | 的任何实例时,它可以工作。但由于某种原因,它不适用于双引号。我想我一定在这里遗漏了一些明显的东西。
require_once 'mysqliconn.php';
$mysql_tables = array("OutputApplicationsView", "OutputComponentsView", "OutputDevicesView", "OutputDisksView", "OutputInstalledSoftwareView", "OutputModulesView", "OutputOraclePTVView", "ScopeListView");
foreach ($mysql_tables as $mysql_table) {
echo "<br> Exporting $mysql_table to CSV file. Please wait.</br>";
$sql = "SELECT * FROM ". $mysql_table . " LIMIT 10";
$stmt = $myconn->prepare($sql);
if($stmt === false) {trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $myconn->error, E_USER_ERROR);}
$execute = $stmt->execute();
if($execute === false) {trigger_error('Wrong SQL: ' . $sql . ' Error: ' …Run Code Online (Sandbox Code Playgroud) 我的代码使用PHP的fputcsv函数生成了一个txt文件。
对于定界符,我正在尝试使用“ |”
$query = mysql_query("SELECT email, emailSource FROM session WHERE is_complete='1' ORDER by sessionid ASC")
$filename= 'here.txt';
$fp = fopen( $filename,'w');
fputcsv($fp, array('Email address', 'Email Source'));
if(mysql_numrows($query) > 0) {
while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
fputcsv($fp, array_values($row));
}
}
fclose($fp);
$contents = file_get_contents($filename);
$contents = str_replace(",", "|", $contents);
file_put_contents($filename, $contents);
Run Code Online (Sandbox Code Playgroud)
我得到的结果全都放在一行上,而不是在单独的一行上显示值,并且标头周围也有“”。
"Email address"|"Email Source"|blah@blah.com|hi|
Run Code Online (Sandbox Code Playgroud)
代替这个:
Email address|Email Source|
blah@blah.com|hi|
Run Code Online (Sandbox Code Playgroud)
请有人能告诉我我在做什么错。是因为我正在使用fputcsv并保存到txt文件吗?
PHP 中的 fputcsv() 和 fgetcsv() 似乎存在编码问题或错误。
以下 PHP 代码:
$row_before = ['A', json_encode(['a', '\\', 'b']), 'B'];
print "\nBEFORE:\n";
var_export($row_before);
print "\n";
$fh = fopen($file = 'php://temp', 'rb+');
fputcsv($fh, $row_before);
rewind($fh);
$row_after = fgetcsv($fh);
print "\nAFTER:\n";
var_export($row_after);
print "\n\n";
fclose($fh);
Run Code Online (Sandbox Code Playgroud)
给我这个输出:
BEFORE:
array (
0 => 'A',
1 => '["a","\\\\","b"]',
2 => 'B',
)
AFTER:
array (
0 => 'A',
1 => '["a","\\\\',
2 => 'b""]"',
3 => 'B',
)
Run Code Online (Sandbox Code Playgroud)
很明显,数据在途中被损坏。最初该行只有 3 个单元格,后来该行有 4 个单元格。由于反斜杠也用作转义字符,中间的单元格被分割。
另请参阅 https://3v4l.org/nc1oE 或者此处,使用分隔符、封装、escape_char 的显式值: https: //3v4l.org/Svt7m …