zelenin писал(а):что такое $db и почему нельзя сразу это написать?
и вообще, дайте код, если обвиняете метод в некорректной работе.
Очевидно, что по $db->exec() нагадать в чем вы не правы, не представляется возможным.
Я не обвиняю метод в некорректной работе. Пытаюсь разобраться что я не так сделал.
Даю кусок кода. Класс предназначен для разбора файла с разделителями директории общего доступа на удаленной рабочей машине Win7 и добавления соответствующего количества записей в MySql. После обработки файл удаляется.
Запуск по крону каждый час.
Результат: файлы разбираются и записи корректно добавляются в базу. Можно считать задачу выполненной. Теперь (если забить на количество записей - их может быть 50-1000) результат можно записать в лог файл. Однако разобраться=?.
Код: Выделить всё
private $cnn;
public function __construct() {
$this->cnn = new PDO($this->dsn, $this->user, $this->passwd);
$this->createTable();
}
public function weelFiles() {
foreach ($files=scandir($this->dirName) as $file) {
if (preg_match('[^P.......\.csv$]', $file)===1) {
echo 'affected rows: '.$this->insertFile($this->dirName.$file)."\n";
if (unlink($this->dirName.$file)===TRUE) {
echo "the file ", $this->dirName.$file, ' has been deleted', "\n";
}
// break;
}
}
}
private function insertFile($file) {
$sql=<<<SQL
USE `liftbase`;
INSERT IGNORE INTO `$this->tableName` (
`event_id`
, `event_date`
, `pult_id`
, `event_code`
, `event_name`
, `bite_signs`
, `lift_guid`
, `saved_state`
, `bite_number`
, `table_number`
, `service_key`
, `lift_id`
) VALUES
SQL;
foreach (file($file) as $f) {
$item=$this->normalizeFile($f);
$sql.="(";
for ($i = 0; $i<=11; $i++) {
$sql.="'{$item[$i]}',";
}
$sql=substr_replace($sql, '),', -1, 1);
// break;
}
$sql=substr_replace($sql, ';', -1, 1);
return $this->cnn->exec($sql);
}
private function normalizeFile($item) {
$item=split(';', $item);
$item[1]=date('Y-m-d', strtotime($item[1]));
$item[1]="$item[1] $item[2]";
$item[2]=$this->pultId;
$item[4]=mb_convert_encoding($item[4], 'UTF-8', 'CP1251');
return $item;
}
Правила существуют не только для того, чтобы их нарушать.