Извините за мой английский. Я выполняю уникальный запрос INSERT, но в базе данных созданы много записей равных. У меня есть php cms mvc с шаблоном singleton и реестром. Когда я вызываю контроллер, загружаются все модели ядра, включая модель, которая управляет базой данных.PDO - запрос PHP выполняется снова без вызова
Я пишу кусок кода:
class DB extends global_core
{
private $PDO;
private $result;
public function __construct()
{
parent::__construct();
}
public function query($query)
{
$this->result = $this->PDO->prepare($query);
$this->result->execute();
return $this->result;
}
}
В другой модели запустить этот метод:
class Stats extends global_core
{
private $stored_agent = false;
public function __construct()
{
parent::__construct();
if (!$this->stored_agent)
$this->saveAgent();
}
public function saveAgent()
{
if ($this->stored_agent) return;
$this->DB->query('INSERT ...');
echo 'ok';
$this->stored_agent = true;
}
}
Теперь в моей базе данных созданы «N» равный рекорд, но в видео печатается правильно только «хорошо», а не «okokokokokokok».
Почему?
Однако, если я вызываю метод от текущего контроллера, я получаю, по праву, только новую запись.
class page extends controller
{
public function __construct()
{
parent::__construct();
$this->loadInfo();
}
protected function loadInfo()
{
$this->Stats->saveAgent();
}
}
поэтому он работает правильно ...
, где проблема?
Убедитесь, что нет никакого другого оператора INSERT в коде. Измените запрос на то, что он не сработает. Если запрос завершается, выведите трассировку стека отладки. Затем вы увидите, какая функция называется функцией сохранения агента. Возможно, это несколько вызовов, распространяемых в вашем коде. Если у вас есть профилирование XDebug (например, любой другой профиль), вы также можете найти вызывающих пользователей в профиле. –
thanks markus, Я вставил ошибку в запрос и напечатал errorInfo pdo. Трассировка стека показала мне 9 классов, которые вызываются. Но вызов метода - один. – gasmor
Ошибки приложения при первом входе. Является ли трассировка стека той, которую вы ожидали? Возможно, вы захотите реализовать решение для регистрации, а не отладку эха. Возможно, вы эхо в буфере вывода, который не отображается. Трудно помочь удаленно, не зная внутренней работы вашего приложения. –