Foros del Web » Programando para Internet » PHP »

CodeIgniter al querer hacer un update, codeigniter me toma un valor como un string

Estas en el tema de al querer hacer un update, codeigniter me toma un valor como un string en el foro de PHP en Foros del Web. Hola chicos como va ? Tengo un problema con una query de codeigniter, trate de hacer de todo y aun asi no pude arregarlo. El ...
  #1 (permalink)  
Antiguo 24/10/2014, 14:18
 
Fecha de Ingreso: julio-2014
Mensajes: 79
Antigüedad: 9 años, 8 meses
Puntos: 1
al querer hacer un update, codeigniter me toma un valor como un string

Hola chicos como va ?
Tengo un problema con una query de codeigniter, trate de hacer de todo y aun asi no pude arregarlo.

El problema es al hacer un update. Codeigniter me toma un valor como un string, y al querer restar ese valor con otro no me deja, porque cree que estoy restando un string con un entero. Para que quede mas claro aca paso la query:

Código:
$this->db->where(dbColumnUser,        $data['user']);
$this->db->update(dbTableUser, array (
                dbColumnUserPoints     => (dbColumnUserPoints - $data['points']),
));
Claramente la query es mas larga, pero lo acorde para que no sea tan incomodo.

El error que me tira en el el navegador es el siguiente:
Cita:
UPDATE Users SET points = -400000 WHERE User = 'Test'
y no entiendo porque me quede un valor negativo en "Points". Porque la query tiene que agarrar el valor actual (400.000) y restarle el valor que paso en la query que es (40.000)
Alquien tendria una idea de que puede estar pasando?
  #2 (permalink)  
Antiguo 24/10/2014, 15:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: al querer hacer un update, codeigniter me toma un valor como un string

Yo veo que estás operando mal tus variables, o peor aún, dbColumnUserPoints ni siquiera es una variable.

¿No debería ser así?
Código PHP:
Ver original
  1. $this->db->update(dbTableUser, array (
  2.                 'dbColumnUserPoints'     => ($dbColumnUserPoints - $data['points']),
  3. ));

O bien, ¿de dónde sale el valor a restar?

Piensa que si "dbColumnUserPoints" (sin la $ sería una constante) no existe básicamente es igual a null, y si haces esto:
Código PHP:
Ver original
  1. var_dump(null - 1234);

Eso te dará -1234 así que eso explica perfectamente lo que te ocurre.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/10/2014, 15:28
 
Fecha de Ingreso: julio-2014
Mensajes: 79
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: al querer hacer un update, codeigniter me toma un valor como un string

Hola pateketrueke,

dbColumnUserPoints NO es una variable, es una constante. esta seteada dentro de un archivo php que tengo en la carpeta config. dbColumnUserPoints es el nombre de la tabla. seria lo mismo que hacer:

Código:
query("update Users set points = points -{$variable} where User='{$variable}'");
  #4 (permalink)  
Antiguo 24/10/2014, 15:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: al querer hacer un update, codeigniter me toma un valor como un string

¿Y qué valor tiene esa constante?

Porque vamos, aun así fueran cadenas de texto PHP hace los cálculos perfectamente:

Código PHP:
Ver original
  1. define('magicNumber', '123');
  2. $varNumber = '456';
  3.  
  4. var_dump(magicNumber - $varNumber); // -333

¿Qué será?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/10/2014, 17:02
 
Fecha de Ingreso: julio-2014
Mensajes: 79
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: al querer hacer un update, codeigniter me toma un valor como un string

la constante dbColumnUserPoints tiene el nombre de la columna. De esta manera, si en un futuro tengo que cambiar el nombre de la columna, lo hago solo en la constante y no en los 27 archivos que tiene el proyecto.

Lo que yo necesito es que al valor que tiene la columna en la base de datos. se le reste lo que le estoy pidiendo.

Si la columna Points tiene un valor de 40, lo que yo quiero hacer es 40 - 2 por ejemplo. En teoria me tiene que dar el resultado pero por alguna razon me deja el valor de la columna en negativo, se entiende ? No es problema de la constante. Lo unico que tiene la contante es el nombre de la columna
  #6 (permalink)  
Antiguo 24/10/2014, 18:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: al querer hacer un update, codeigniter me toma un valor como un string

Bueno, pues el asunto es que estás calculando la resta usando código PHP, es decir: tomando el valor de la constante y restandole un valor numérico.

¿De verdad no alcanzas a comprender que ese es precisamente el problema?

Si deseas que el calculo se realice con SQL (que me imagino así es) debes pasar la expresión de manera adecuada, para hacer el cálculo con la misma consulta a generar.

Observa bien las diferencias:

Código PHP:
Ver original
  1. define('loquesea', 'alguna_columna');
  2.  
  3. // MAL
  4. $foo = loquesea;
  5. $bar = 42;
  6.  
  7. $sql = "UPDATE otra_tabla SET " . ($foo - $bar);
  8. var_dump($sql); // UPDATE otra_tabla SET -42
  9.  
  10. // BIEN
  11. $sql = "UPDATE otra_tabla SET $foo - $bar";
  12. var_dump($sql); // UPDATE otra_tabla SET alguna_columna - 42

¿Se entiende?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: codeigniter, string, toma, update, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.