
25/01/2010, 06:56
|
 | | | Fecha de Ingreso: junio-2002 Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 10 meses Puntos: 8 | |
Cake Php error SQL query Hola gente , sigo batallando con Cake Php y la verdad que me gusta mucho este FW. Me ha surgido un problemilla que por mucho que googleo no consigo resolver:
tengo este controlador llamado juegos_controller.php:
Código:
class JuegosController extends AppController {
var $name = 'Juegos';
var $helpers = array('Html', 'Form', 'Form');
var $uses = array('Juego','User','Movimiento');
function index() {
$this->Juego->recursive = 0;
$this->set('juegos', $this->paginate());
}
function ajugar($user_id,$juego_id,$numero_nivel) {
//Buscamos el Nivel Mayor del Juego en cuestión (juego 1 en este caso)
$nivelMayor=$this->Juego->Nivele->nivelMayor($juego_id);
//Comparamos el Nivel Mayor con nuestro nivel para determinar cual es mayor
if ($numero_nivel > $nivelMayor['Nivele']['Numero_Nivel']) {
//Poner el estado del jugador a finalizado (4 es el estado finalizado)
if (!$this->User->activar($user_id,4))
return false;
}
else //si el $nivelMayor es mayor que nuestro nivel actual ($numero_nivel)
{
//calculamos precio inscripción a este nivel
$inscripcion=$this->Juego->precioJuegoNivel($juego_id,$numero_nivel);
//Descrementamos el saldo_juego de la tabla USERS: Saldojuego= Saldojuego-incripcion
if (!$this->User->decrementarSaldoJuego($user_id,$inscripcion) )
return false;
//Hayamos la Id del nivel en el que estamos
if (!$nivel_id=$this->Juego->Nivele->nivel_id($juego_id,$numero_nivel))
return false;
//Insertamos nuestra partida
if (!$id_partida=$this->User->Partida->partidaInsertar($user_id,$nivel_id))
return false;
//Incrementamos en uno el valor del campo numero_jugadores de la tabla NIVELES
if (!$this->Juego->Nivele->incrementarJugadores($juego_id,$nivel_id))
return false;
/*Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
Concepto=”Inscripcion en juego” & juego_id & “en el nivel” & numero_nivel
Importe= incripcion
Partida_id=la Partida_id de la tupla anteriormente insertada en la tabla partidas
Saldado=true */
$concepto="Inscripción en Juego&". $juego_id."&".$numero_nivel;
$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);
if (!$this->Movimiento->insertarMoviento($concepto,$nivel_datos['Nivele']['inscripcion'],
$id_partida,$saldado=true))
return false;
// Buscar en la tabla JUEGOS el juego_id y obtener el valor del campo posiciones
$posiciones=$this->Juego->numPosicionesJuego($juego_id);
//Si numero_jugadores >posiciones entonces */
if ($nivel_datos['Nivele']['numero_jugadores'] > $posiciones) {
/*Buscar en la tabla PARTIDAS, aquella cuya partida_id sea el número más pequeño correspondiente al numero_nivel y al juego_id, siempre y cuando el campo finalizado este a false (ahora el users_id será el correspondiente al de este jugador pues es el promocionado a un nuevo nivel)*/
$partidaPeq=$this->User->Partida->partidaPeqBuscar($juego_id,$numero_nivel,$user_id);
//Decrementar en un jugador el campo numero_jugadores en uno de la tabla NIVELES
$decrementarJugadores=$this->Juego->Nivele->decrementarJugadores($juego_id,$nivel_id);
if (!$decrementarJugadores )
return false;
//Poner el campo finalizado=true de la tabla PARTIDAS
$finalizado=$this->User->Partida->finalizarPartida($partidaPeq);
//Buscamos en la tabla NIVELES, el premio correspondiente al nivel numero_nivel
$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);
//Incrementamos el saldo_juego= saldo_juego+ premio
$incrementaSaldo=$this->User->incrementarSaldoJuego($user_id,$nivel_datos['Nivele']['premio']);
if (!$incrementaSaldo)
return false;
/*Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
Concepto=”Premio en juego” & juego_id & “en el nivel” & numero_nivel
Importe= -premio
Partida_id=la Partida_id correspondiente la users_id, en el juego_id en numero_nivel
Saldado=true */
$concepto="Premio en juego&". $juego_id."&".$numero_nivel;
//$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);
if (!$this->Movimiento->insertarMoviento($concepto,$nivel_datos['Nivele']['premio'],
$id_partida,$saldado=true))
return false;
/*Buscamos en la tabla NIVELES, el aporte_crecimiento que tiene que hacer en el numero_nivel
Decrementamos el saldo_juego=saldo_juego- aporte_crecimiento */
$aporteCremimiento=$this->User->decrementarSaldoJuego($user_id,$nivel_datos['Nivele']['aporte_crecimiento']);
if (!$aporteCremimiento)
return false;
/*Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
Concepto=”Aporte a la lista” & juego_id & “en el nivel” & numero_nivel
Importe= aporte_crecimiento
Partida_id=la Partida_id correspondiente la users_id, en el juego_id en numero_nivel
Saldado=true*/
$concepto="Aporte a la lista&". $juego_id."&".$numero_nivel;
if (!$this->Movimiento->insertarMoviento($concepto,$nivel_datos['Nivele']['aporte_crecimiento'],
$id_partida,$saldado=true))
return false;
/*Calcular rentabilidad (es la suma total del campo rentabilidad para aquellos niveles cuyo
Numero_Nivel<=numero_nivel)*/
$rentabilidad=$this->Juego->Nivele->rentabilidadNivel($juego_id,$numero_nivel);
//Incrementamos saldo_efectivo=saldo_efectivo+rendimiento
$saldoEfectivo=$this->User->IncrementarsaldoEfectivo($user_id,$rentabilidad);
/* Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
Concepto=”Rendimiento en el ” & juego_id & “en el nivel” & numero_nivel
Importe - rendimiento
Partida_id=la Partida_id correspondiente la users_id, en el juego_id en numero_nivel
Saldado=true
Ajugar(jugador_id,juego_id,numero_nivel+1 ) */
$concepto="Rendimiento en el Juego&". $juego_id."&".$numero_nivel;
//$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);
if (!$this->Movimiento->insertarMoviento($concepto,$rentabilidad,
$id_partida,$saldado=true))
return false;
return true;
}
}
return false;
}
}
Tengo que llamarlo desde otro controlador y lo hago de esta manera: $this->Juego->ajugar($user_id,1,1);
No entiendo el error porque si llamo a este método directamente de este modo http://localhost/miweb/juegos/ajugar/1/1/1 funciona perfectamente todo el código que lleva dentro dicho método.
El problema es cuando lo llamo desde este otro controlador que me tira este error:
Código:
Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ajugar' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 525]
Code | Context
$sql = "ajugar"
$error = "1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ajugar' at line 1"
$out = null
$out = null;
if ($error) {
trigger_error("<span style = \"color:Red;text-align:left\"><b>SQL Error:</b> {$this->error}</span>", E_USER_WARNING);
DboSource::showQuery() - CORE\cake\libs\model\datasources\dbo_source.php, line 525
DboSource::execute() - CORE\cake\libs\model\datasources\dbo_source.php, line 201
DboSource::fetchAll() - CORE\cake\libs\model\datasources\dbo_source.php, line 336
DboSource::query() - CORE\cake\libs\model\datasources\dbo_source.php, line 297
Model::call__() - CORE\cake\libs\model\model.php, line 441
Overloadable::__call() - CORE\cake\libs\overloadable_php5.php, line 52
Juego::ajugar() - [internal], line ??
MovimientosbancariosController::processTransaction() - APP\controllers\movimientosbancarios_controller.php, line 107
Object::dispatchMethod() - CORE\cake\libs\object.php, line 118
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 227
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 194
[main] - APP\webroot\index.php, line 88
Query: ajugar
bool(false)
Haber si a alguien se le ocurre donde puede estar el fallo.
Mil gracias de antemano. |