PHP:将GoogleSheet插入数据库,处理空白单元格

时间:2019-11-29 14:08:17

标签: php

我有一个奇怪的问题...

我使用API​​从GoogleSheet获取数据。然后,我将这些数据插入数据库中。

但是问题是,当我在数据库中插入这些数据时,空白单元格被上述数据替换。我不想要它,如果我有一个空白单元格,我想像一个空值一样将其插入数据库中。

例如,在这张图片中,当我插入数据时,将插入“ cynthia itua”,而不仅仅是“ cynthia”:firstname / lastname

这是该表的屏幕截图。 Table structure

我需要做什么?

这是我的代码: StrAdaptator,DataAdaptator和PhoneAdaptator只是用于格式化数据的少数类。

    public function eventsData()
    {
        $range = 'Events';
        $values = [];
        Sheetapi::getSpreadsheetData($values, $range);

        if (empty($values)) {
            print "No data found.\n";
        } else {

            $keys = array_shift($values);
            // print_r($keys);
            $fields = [];

            foreach ($values as $row) {

                if (!empty($row)) {
                    StrAdaptator::f($fields, 'event', $row[array_search('Event Name', $keys)]); //colonne A
                    StrAdaptator::f($fields, 'type', $row[array_search('Event Type', $keys)]); //colonne B
                    DateAdaptator::f($fields, 'date', $row[array_search('Event Date', $keys)], DateAdaptator::YYYYMMDDshort); //colonne C
                    StrAdaptator::f($fields, 'city', $row[array_search('City', $keys)]); //colonne E
                    StrAdaptator::f($fields, 'firstname', $row[array_search('First Name', $keys)]); //colonne F
                    StrAdaptator::f($fields, 'lastname', $row[array_search('Last Name', $keys)]); //colonne G
                    EmailAdaptator::f($fields, 'email', $row[array_search('Email', $keys)]); //colonne H
                    StrAdaptator::f($fields, 'phone', $row[array_search('Phone', $keys)]); //colonne I
                    PhoneAdaptator::f($fields, 'E164', $row[array_search('Phone', $keys)]); //colonne I
                    StrAdaptator::f($fields, 'socialMediaHandle', $row[array_search('Social Media Handle', $keys)]); //colonne J
                    StrAdaptator::f($fields, 'musicalGenre', $row[array_search('Musical Genre', $keys)]); //colonne K
                    StrAdaptator::f($fields, 'market', 'B2C'); //colonne L
                }
                try {
                    Agnostik::sql_insertUpdate('events', $fields, self::WITH_SQL_LOG);
                } catch (PDOException $e) {
                    echo "\r\n" . 'PDO Exception: ' . $e->getMessage();
                }
                print_r($fields);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您的问题是您不会在每次循环转弯时重置$fields,所以当$row为空时,它将保持先前的值。

请尝试使用以下修改的代码,或者如果需要使用else专门插入空值,请添加$fields

            foreach ($values as $row) {

                $fields = []; //Move this line inside the loop

                if (!empty($row)) {
                    StrAdaptator::f($fields, 'event', $row[array_search('Event Name', $keys)]); //colonne A
                    StrAdaptator::f($fields, 'type', $row[array_search('Event Type', $keys)]); //colonne B
                    DateAdaptator::f($fields, 'date', $row[array_search('Event Date', $keys)], DateAdaptator::YYYYMMDDshort); //colonne C
                    StrAdaptator::f($fields, 'city', $row[array_search('City', $keys)]); //colonne E
                    StrAdaptator::f($fields, 'firstname', $row[array_search('First Name', $keys)]); //colonne F
                    StrAdaptator::f($fields, 'lastname', $row[array_search('Last Name', $keys)]); //colonne G
                    EmailAdaptator::f($fields, 'email', $row[array_search('Email', $keys)]); //colonne H
                    StrAdaptator::f($fields, 'phone', $row[array_search('Phone', $keys)]); //colonne I
                    PhoneAdaptator::f($fields, 'E164', $row[array_search('Phone', $keys)]); //colonne I
                    StrAdaptator::f($fields, 'socialMediaHandle', $row[array_search('Social Media Handle', $keys)]); //colonne J
                    StrAdaptator::f($fields, 'musicalGenre', $row[array_search('Musical Genre', $keys)]); //colonne K
                    StrAdaptator::f($fields, 'market', 'B2C'); //colonne L
                }
                try {
                    Agnostik::sql_insertUpdate('events', $fields, self::WITH_SQL_LOG);
                } catch (PDOException $e) {
                    echo "\r\n" . 'PDO Exception: ' . $e->getMessage();
                }
                print_r($fields);
            }