con = $con; $this->path = $path; } /** * {@inheritdoc} */ public function insert() : void { $fp = \fopen($this->path, 'r'); if ($fp === false) { return; } $table = \basename($this->path, '.csv'); $titles = []; // get column titles $titles = \fgetcsv($fp, 4096); if ($titles === false) { return; } $columns = \count($titles); if ($columns === 0) { return; } // insert data $query = new Builder($this->con); $query->insert(...$titles)->into($table); while (($cells = \fgetcsv($fp)) !== false) { $query->values(...$cells); } $query->execute(); \fclose($fp); } /** * {@inheritdoc} */ public function select(array $queries) : void { $fp = \fopen($this->path, 'r+'); if ($fp === false) { return; } foreach ($queries as $key => $query) { $results = $query->execute()?->fetchAll(\PDO::FETCH_ASSOC); if (!\is_array($results)) { continue; } if ($key > 0) { return; } $rows = \count($results); if ($rows < 1) { break; } $colCount = \count($results[0]); $columns = \array_keys($results[0]); // set column titles for ($i = 1; $i <= $colCount; ++$i) { \fputcsv($fp, $columns); } // set data foreach ($results as $result) { \fputcsv($fp, $result); } } \fclose($fp); } /** * {@inheritdoc} */ public function update() : void { $fp = \fopen($this->path, 'r+'); if ($fp === false) { return; } $table = \basename($this->path, '.csv'); $titles = []; // get column titles $titles = \fgetcsv($fp, 4096); if ($titles === false) { return; } $columns = \count($titles); if ($columns === 0) { return; } $idCol = (string) \array_shift($titles); // update data while (($cells = \fgetcsv($fp)) !== false) { $query = new Builder($this->con); $query->update($table); for ($j = 2; $j <= $columns; ++$j) { $query->sets((string) $titles[$j - 2], $cells[$j - 1]); } $query->where($idCol, '=', $cells[0]); $query->execute(); } \fclose($fp); } }