php - 在插入/更新每一行时导出 MySQL 表以将其标记为 "exported"或等效项

标签 php mysql csv

我可以使用 PHPMyAdmin 或我当前使用 Cron 作业的 PHP 脚本将我的表导出到 csv 文件中,但我正在尝试将其导出到无法再次导出这些行的位置。我的想法是只在列中更新或插入一个值以将其标记为“已导出”,并尝试找到一种方法来仅导出未标记为此类的行。如果有帮助,这是我的导出 PHP 脚本。谢谢

<?php
 // mysql database connection details
    $host = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "database";

    // open connection to mysql database
    $connection = mysqli_connect($host, $username, $password, $dbname) or die("Connection Error " . mysqli_error($connection));

    // fetch mysql table rows
    $sql = "select * from product_sheets";
    $result = mysqli_query($connection, $sql) or die("Selection Error " . mysqli_error($connection));

$csv_fields=array();  // header array for the csv file

$csv_fields[]='header1';
$csv_fields[]='header2';


    $fp = fopen('/home/blog2696/public_html/productsheet/Exports/export.csv', 'w');

        fputcsv($fp, $csv_fields);

    while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($fp, $row);
    }

    fclose($fp);

    //close the db connection
    mysqli_close($connection);
?>

最佳答案

首先,将名为“exported”的 bool 字段添加到表中,默认值为 FALSE (0)。

其次,将 SELECT 更改为仅选择导出为 false 的记录。

$sql = "select * from product_sheets where exported = 0";

第三,在写入 CSV 后将该记录的“导出”字段更新为 TRUE (1)。

$export_mark_sql = "UPDATE product_sheets SET exported = 1 WHERE primary_key= " . $row['primary_key'];
$export_mark_result = mysqli_query($connection, $export_mark_sql ) or die("Update Error " . mysqli_error($connection));

现在在一起:

<?php

// mysql database connection details
$host = "localhost";
$username = "username";
$password = "password";
$dbname = "database";

// open connection to mysql database
$connection = mysqli_connect($host, $username, $password, $dbname) or die("Connection Error " . mysqli_error($connection));

// fetch mysql table rows for all records that haven't been exported already
$sql = "select * from product_sheets where exported = 0";
$result = mysqli_query($connection, $sql) or die("Selection Error " . mysqli_error($connection));

$csv_fields=array();


$fp = fopen('/home/blog2696/public_html/productsheet/Exports/export.csv', 'w');

    fputcsv($fp, $csv_fields);

while($row = mysqli_fetch_assoc($result))
{
    // Mark this exported record as exported=true
    // -- Change "primary_key" below to the primary key field of the "product_sheets" table.
    $export_mark_sql = "UPDATE product_sheets SET exported = 1 WHERE primary_key= " . $row['primary_key'];
    $export_mark_result = mysqli_query($connection, $export_mark_sql ) or die("Update Error " . mysqli_error($connection));
    fputcsv($fp, $row);
}

fclose($fp);

//close the db connection
mysqli_close($connection);
?>

关于php - 在插入/更新每一行时导出 MySQL 表以将其标记为 "exported"或等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40368801/

相关文章:

php - Symfony:使用 querybuilder 构建连接两个表的选择选项

php - 我需要从两个表中拉入一个循环并匹配数据

mysql 以优化的方式向大表添加多列

mysql - 读取数据库图

python - 为 pandas.read_csv 指定正确的 dtypes 以获取日期时间和 bool 值

PHP - 无法上传大于 25MB 的文件

php - 使用 PHP 提交表单时 MySQL 数据库未更新

mysql - 自动增量主键作为外键 - 合并数据库中的问题

android - 如何将我的 sqlite 数据库导出到 android 中的 csv?

c# - 通过 C# 在 Excel 中打开 CSV 文件?