Les cuento que estoy desarrollando una App usando CodeIgniter 1.7.2 y Doctrine 1.2.2 ambos integrados perfectamente, el formato de Base de Datos es Postgrees.
8.4.1
Sin embargo a la hora de insertar un obj de la forma clasica
Código PHP:
obj->save()
El codigo implicado es el siguiente.
METODO DEL CONTROLADOR QUE RECIBE LOS PARAMETROS
fichero: paciente_controller.php extiende de Controller
Código PHP:
function salvar() {
$paciente = new Paciente(PacienteTable::getInstance(), true);
$carnet = $this->input->post('carnet');
$nombre = $this->input->post('nombre');
$apellidos = $this->input->post('apellidos');
$grado = $this->input->post('grado');
$estado_civil = $this->input->post('estado_civil');
$sexo = $this->input->post('sexo');
$color_piel = $this->input->post('color_piel');
$fecha_nacimiento = $this->input->post('fecha_nacimiento');
$lugar_nacimiento = $this->input->post('lugar_nacimiento');
$um = $this->input->post('um');
$edad = $this->input->post('edad');
$direccion = $this->input->post('direccion');
$paciente->salvar($carnet, $nombre, $apellidos, $grado, $estado_civil, $sexo, $color_piel, $fecha_nacimiento, $lugar_nacimiento, $um, $edad, $direccion);
}
fichero: Paciente.php extiende de BasePaciente
Código PHP:
public function salvar($carnet,$nombre,$apellidos, $grado, $estado_civil, $sexo, $color_piel,
$fecha_nacimiento,$lugar_nacimiento,$um, $edad, $direccion)
{
$this->carnet = $carnet;
$this->nombre = $nombre;
$this->apellidos = $apellidos;
$this->grado = $grado;
$this->estado_civil = $estado_civil;
$this->sexo = $sexo;
$this->color_piel = $color_piel;
$this->fecha_nacimiento = $fecha_nacimiento;
$this->lugar_nacimiento = $lugar_nacimiento;
$this->um = $um;
$this->edad = $edad;
$this->direccion = $direccion;
try {
$this->save();
$result["success"] = true;
}
catch (Doctrine_Validator_Exception $e) {
$errors = $this->getErrorStackAsString();
$errorStack = $this->getErrorStack();
$result["success"] = false;
$result["errors"]["reason"] = $errors;
foreach($errorStack as $fieldName => $errorCodes) {
$result["errors"][$fieldName]= $fieldName . " - " . implode(', ', $errorCodes);// . "\n";
}
}
echo json_encode($result);
return json_encode($result);
}
Uncaught exception 'Doctrine_Connection_Pgsql_Exception' with message 'SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type character varying(1)' in C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doc trine\Connection.php:1082
El codigo anterior funciona perfectamente, con una BD mysql, les adelanto, que los parametros del objetos son correctamente enviados, lo notaran en la validacion que se hace en el metodo salvar, la cual verifica que no halla errores en los paramentros.
Alguna idea de porque se produce este error? De donde proviene o como puede ser resuelto?
Para los mas avezados publico el Stack trace, quizas peudan definir la causa del mismo.
Código HTML:
<b>Fatal error</b>: Uncaught exception 'Doctrine_Connection_Pgsql_Exception' with message 'SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type character varying(1)' in C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doctrine\Connection.php:1082 Stack trace: #0 C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doctrine\Connection\Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement)) #1 C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doctrine\Connection.php(1042): Doctrine_Connection_Statement->execute(Array) #2 C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doctrine\Connection\Pgsql.php(244): Doctrine_Connection->exec('INSERT INTO pac...', Array) #3 C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doctrine\Connection\UnitOfWork.php(635): Doctrine_Connection_Pgsql->insert(Object(PacienteTable), Array) #4 C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doctrine\Connection\UnitOfWork.php(566): Doctrine_Connection in <b>C:\wamp\www\Peritaje\apps\plugins\doctrine\lib\Doctrine\Connection.php</b> on line <b>1082</b><br />