westdc-zf1/application/module/Goodby/CSV/Import/Standard/Observer/SqlObserver.php

63 lines
1.5 KiB
PHP

<?php
namespace Goodby\CSV\Import\Standard\Observer;
class SqlObserver
{
private $table;
private $columns;
private $path;
private $file = null;
public function __construct($table, $columns, $path)
{
$this->table = $table;
$this->columns = $columns;
$this->path = $path;
}
public function notify($line)
{
$sql = $this->buildSql($line);
if ($this->file === null) {
$this->file = new \SplFileObject($this->path, 'a');
}
$this->file->fwrite($sql);
}
private function buildSql($line)
{
$line = array_map(function($value) {
$number = filter_var($value, FILTER_VALIDATE_INT);
if ($number !== false) {
return $number;
}
if (is_string($value)) {
if (strtolower($value) === 'null') {
return 'NULL';
}
if (strtolower($value) === 'true') {
return 'true';
}
if (strtolower($value) === 'false') {
return 'false';
}
return '"' . addslashes($value) . '"';
}
throw new \InvalidArgumentException('value is invalid: ' . var_export($value, 1));
}, $line);
return 'INSERT INTO ' . $this->table . '(' . join(', ', $this->columns) . ')' .
' VALUES(' . join(', ', $line) . ');';
}
}