Почему в таблицу базы данных добавляются сразу 2 новых записи, а не одна?

При обновлении страницы, в таблицу добавляются 2 записи. В коде найти не могу, почему 2, а не одна.
Помогите, уже минут 30 тыкаю туда сюда... И query() выполняется 1 раз, но почему записи то 2 :(
Использую для подключения к базе PDO.

Выкладываю кодики:
index.php
$sth = $dataBase->insert('tasks', array('task_title' => 'Третья запись', 'task_desc' => 'Ура, появилась третья запись!'));
echo '<br>';
var_dump($sth);


Файл работы с базой:
public function insert($tableName, $row = array()) {
		if (!count($row)) return false;
		$tableName = $this->getTableName($tableName); // Вернет имя таблицы с учетом префикса
		$fields = '(';
		$values = 'VALUES (';
		$params = array();
		foreach ($row as $key => $value) {
			$fields .= "`$key`,";
			$values .= "?,";
			$params []= $value;
		}
		// Удаление последнего символа ','
		$fields = substr($fields, 0, -1).')';
		$values = substr($values, 0, -1).')';
		$query = "INSERT INTO `$tableName` $fields $values";

		echo $query.'<br>';
		var_dump($params);

		return $this->query($query, $params);
	}

        private function query($query, $params) {
		echo '<br>YO!';
		$STH = $this->_DBH->prepare($query);
		if (!$STH) return false;
		if (isset($params)) $STH->execute($params);
		else $STH->execute();
		// Если НЕ производилась вставка, вернет true, иначе вернет id вставленной записи
		if ($this->_DBH->lastInsertId() === 0) return true;
		else return $this->_DBH->lastInsertId();
	}


p.s.: кажется ничего не забыл добавить.

UPD: Ответ крылся в настройках .htaccess, а именно в этих строчках:
RewriteCond %{REQUST_FILENAME} !-f
RewriteCond %{REQUST_FILENAME} !-d
RewriteRule .* index.php [L]

Переход на index.php порождал перенаправление на index.php.
Что было абсолютно не предсказуемым поведением для меня :)
  • Вопрос задан
  • 3860 просмотров
Решения вопроса 1
slavikse
@slavikse Автор вопроса
Ноль помощи :) Круто.
Для супер непонятливых, index.php:
<?php

require_once 'sys/config/config.class.php';
require_once 'sys/core/abstractdatabase.class.php';

$dataBase = new AbstractDataBase(Config::$dbHost, Config::$dbName, Config::$dbUser, Config::$dbPass, Config::$dbPrefix);

$sth = $dataBase->insert('tasks', array('task_title' => 'Четвертая запись!', 'task_desc' => 'Именно четвертая, не пятая и не шестая!'));

echo '<br><pre>';
var_dump($sth);
echo '</pre>';


execute() - вызывается 1 раз, будьте внимательнее, прежде, чем писать о таком...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rsi
software engineer
30 не срок, что бы вопросы создавать, откройте для себе xdebug, будет проще такие косяки искать. А вообще не ленитесь использовать фигурные скобки, тогда тоже будете замечать очевидные вещи.
if (!$STH) return false;
       if (isset($params)) $STH->execute($params);
else $STH->execute();


Два раза execute вызываете
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы