/** * Esegue una procedura ed inserisce eventuali parametri di ritorno in $return_params * @param type $query * @param type $bind_params * @param type $return_params * @return boolean */ public function callProcedure($query, $bind_params = null, &$return_params = null) { $pdo = $this->getDbInstance(); $string = $query; $params = array(); if ($query instanceof Query) { $string = $query->toString(); $params = $query->getBindParams(); $stmt = $pdo->prepare($string); } else { if ($query instanceof \PDOStatement) { $stmt = $query; } else { $stmt = $pdo->prepare($query); } } if (!is_null($bind_params)) { $params = $bind_params; } try { $stmt->execute($params); if (is_null($return_params)) { return true; // procedure eseguita } // altrimenti se non è null vuol dire che è stato passato e quindi devo ricavarmi i valori // in mysql non è possibile usare la costante \PDO::PARAM_INPUT_OUTPUT in quanto genera errore // quindi faccio una select sulle variabili indicate in fase di chiamata $selectclassname = \smn\pheeca\kernel\Database::getClauseClassNameFromDriverName('select', 'mysql'); $select_class = new $selectclassname($return_params); $stmt = $pdo->prepare($select_class->toString()); $stmt->execute($return_params); $return_params = $stmt->fetchAll(\PDO::FETCH_ASSOC); return $return_params; } catch (\PDOException $ex) { echo 'Adapter in exception : ' . $ex->getMessage(); return false; } }