I have a terrible problem with pdo statements. My class generates an Object-based SQL Query, then redirects the query and params to the Bd Class and executes, but the data is inserted twice into the database.
Table in 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;
Generated request
INSERT INTO es_simple_object (es_simple_object.id_object, es_simple_object.active) VALUES (NULL, ?)
Generated Array of Parameters
Array ( [0] => 1 )
db function call
static::$db = Db::getInstance(); static::$db->_execute($sql, $params);
Bd Class (only the functions used for this task)
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; } }
I have no more ideas how to solve this problem.
source share