Ho un problema terribile con le istruzioni pdo. La mia classe genera una query SQL basata sull'oggetto, quindi inoltra la query e i parametri alla classe Bd ed esegue, ma i dati vengono inseriti due volte nel database.PDO Inserisce i dati due volte su una singola query
Tabella nel database
CREATE TABLE IF NOT EXISTS `es_simple_object` (
`id_object` int(10) unsigned NOT NULL AUTO_INCREMENT,
`active` tinyint(1) NOT NULL,
PRIMARY KEY (`id_object`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
generata interrogazione
INSERT INTO es_simple_object (es_simple_object.id_object, es_simple_object.active) VALUES (NULL, ?)
params generati matrice funzione
Array
(
[0] => 1
)
chiamata Db
static::$db = Db::getInstance();
static::$db->_execute($sql, $params);
Bd Class (solo funzioni utilizzate per questo lavoro)
public static function getInstance()
{
if (!isset(self::$instance))
self::$instance = new Db();
return self::$instance;
}
private function __construct()
{
$connection = 'mysql:host='.$this->server.'; port='.$this->port.'; dbname='._DB_NAME_.'; charset='._DB_CHARSET_;
try
{
$this->link = new PDO($connection, _DB_USER_, _DB_PASSWD_);
$this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $ex)
{
Tools::_catchException($ex);
exit;
}
return $this->link;
}
public function _execute($sql, $params = array())
{
try
{
$pdoStatement = $this->link->prepare($sql);
$pdoStatement->execute($params == null ? array(null) : $params);
$this->rows_affected = $pdoStatement->rowCount();
$this->rows_returned = $pdoStatement->columnCount();
$this->last_id = $this->link->lastInsertId();
$this->result = $pdoStatement;
return $pdoStatement;
}
catch (PDOException $ex)
{
Tools::_catchException($ex, array($sql, $params));
return false;
}
}
non ho più idee come risolvere questo problema
Puoi anche mostrare il tuo metodo 'Db :: getInstance()'? – marian0
@ marian0 Sì, ho aggiornato la domanda – esik
È possibile che tu stia chiamando la funzione '_execute' due volte come in un ciclo o qualcosa del genere. Puoi usare [debug_backtrace] (http://php.net/manual/en/function.debug-backtrace.php) nella funzione '_execute' per vedere ogni volta che viene chiamato e da dove. – dan08