/** * Execute an update query for an object * * @param Model $object * * @return bool */ public static function update(Model &$object) { $database = self::get($object::_getDatabaseNamespace()); $connection = $database->getConnection(); $updates = $criteria = $params = array(); //dirty data foreach ($object->_getDirty() as $object_field => $object_value) { $updates[] = sprintf('%s = ?', $database->escape($object_field)); $params[] = $database->valueToSQL($object_value); } //row identifier foreach ($object->_getIdentifyingData() as $identifying_field => $identifying_value) { $value = $database->valueToSQL($identifying_value); $criteria[] = DB\Query::parseWhereCondition(sprintf('%s = ?', $database->escape($identifying_field)), $value); $params = array_merge($params, $value); } $sql = sprintf('UPDATE %s.%s SET %s WHERE %s;', $database->escape($object::_getSchemaName()), $database->escape($object::_getTableName()), implode(',', $updates), implode(' AND ', $criteria)); $connection->prepare($sql)->execute($params); return true; }