/** * * @param string $sql * @param array $array * @return PDOStatement */ protected function getDBStatement($sql, $array = null) { if ($array) { list($sql, $array) = SQLBind::parseSQL($this->_connectionManagement, $sql, $array); $stmt = $this->_db->prepare($sql); foreach ($array as $key => $value) { $stmt->bindValue(":" . SQLBind::keyAdj($key), $value); } } else { $stmt = $this->_db->prepare($sql); } return $stmt; }
/** * Transform generic parameters [[PARAM]] in a parameter recognized by the provider name based on current DbParameter array. * * @param ConnectionManagement $connData * @param string $sql * @param array $params * @return array An array with the adjusted SQL and PARAMs */ public static function parseSQL(ConnectionManagement $connData, $sql, $params = null) { if (is_null($params)) { return $sql; } $paramSubstName = SQLBind::getParamModel($connData); foreach ($params as $key => $value) { $arg = str_replace("_", SQLBind::keyAdj($key), $paramSubstName); $count = 0; $sql = preg_replace("/(\\[\\[{$key}\\]\\]|:" . $key . "[\\s\\W]|:{$key}\$)/", $arg . ' ', $sql, -1, $count); if ($count === 0) { unset($params[$key]); } } $sql = preg_replace("/\\[\\[(.*?)\\]\\]/", "null", $sql); return array($sql, $params); }