2017-02-08 1 views
0

J'ai cette méthode d'enregistrement dans mon modèle:Phalcon d'erreur datetime Oracle lorsque le temps est utilisé

public function save($data = null, $whiteList = null){ 
    $res = false; 
    $sql = ''; 
    $di = \Phalcon\DI::getDefault(); 
    try { 
     $param = array("[fecha] = to_date('" . $this->fecha . "', 'YYYY-MM-DD HH24:MI:SS') and [parametro_id] = :parametro_id:", 
         "bind" => array("parametro_id" => $this->parametro_id)); 
     $primero = Instantaneos::findFirst($param); 
     if ($primero){ 
      $this->instantaneo_id = $primero->instantaneo_id; 
     } else { 
      $sql = "select AZUL_S_INSTANTANEOS.nextval from dual"; 
      $result = $di->getShared('db')->query($sql); 
      while($row = $result->fetchArray()){ 
       $this->instantaneo_id = $row['NEXTVAL']; 
      } 
     } 
     $this->fecha = date('d/M/y', strtotime($this->fecha)); 
     $res = parent::save($data, $whiteList); 
     $res = true; 
    } catch (Exception $ex) { 
     $res = false; 
     $this->appendMessage(new Message($ex->getMessage())); 
    } 
    return $res; 
} 

Et cela fonctionne, mais, quand je modifie cette ligne:

$this->fecha = date('d/M/y', strtotime($this->fecha)); 

Avec celui-ci:

$this->fecha = date('d/M/y H:i:s', strtotime($this->fecha)); 

Je reçois cette erreur:

SQLSTATE[HY000]: General error: 1830 OCIStmtExecute: ORA-01830: date format picture ends before converting entire input string 

(ext \ pdo_oci \ oci_statement.c: 148) Et j'ai besoin de sauvegarder les informations de temps, j'essaie de créer ma propre méthode de sauvegarde, sans parent :: save, en écrivant mon propre sql lors de l'insertion ou de la mise à jour:

$sql_i = "insert into AZUL_INSTANTANEOS values(%d,%d,to_date('%s', 'YYYY-MM-DD HH24:MI:SS'),%f,'%s')"; 
    $sql_u = "update AZUL_INSTANTANEOS set val = %f, valf = '%s' where instantaneo_id = %d"; 

Et en utilisant:

$db->execute($sql); 

Mais je reçois une autre erreur:

Maximum execution time of 30 seconds exceeded in <b>\app\config\services.php</b> on line <b>172</b><br /> 

J'utilise:

  1. XAMPP 1.8.2 (PHP version 5.4.31, Apache/2.4.10 (Win32))
  2. Oracle Database 11g Enterprise Edition de presse 11.2.0.1.0 - Production
  3. Phalcon 2.1.0b

¿Un conseil ?, merci.

Répondre

1

Oracle n'est pas totalement pris en charge dans Phalcon. Il y a un pilote dans l'incubateur situé here que vous pouvez utiliser.

Oracle a également une syntaxe différente que PHQL de Phalcon ne peut potentiellement pas reconnaître. Je suggère que vous commenciez par ajouter la consignation d'instruction de SQL à votre application, de sorte que vous puissiez voir ce qui est envoyé à la base de données et puis comprendre comment le corriger.

Jetez un oeil à la page this et faites défiler vers le bas à l'endroit où il est dit Logging SQL Statements

Ajoutez à cela et jeter un oeil à ce qui se passe avec votre requête.