He creado este código para dar +1 punto, pero no funciona correctamente.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
la variable $ puntos son los puntos del usuario en este momento ... quiero que sea más uno ... así que, por ejemplo, si tuviera 5 puntos, debería ser 5 + 1 = 6 ... pero no lo hace, simplemente cambia a 1
¿Qué he hecho mal? gracias
php
mysql
sql
sql-update
Karem
fuente
fuente
Respuestas:
También podrías hacer esto:
fuente
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
y no funcionó. Lo que hizo el trabajo fue:UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
.Puede hacerlo sin tener que consultar la cantidad real de puntos, por lo que le ahorrará tiempo y recursos durante la ejecución del script.
De lo contrario, lo que estaba haciendo mal es que pasó la cantidad anterior de puntos como una cadena (
points='5'+1
), y no puede agregar un número a una cadena. ;)fuente
Espero no ir fuera del tema en mi primera publicación, pero me gustaría ampliar un poco el reparto de enteros para encadenar, ya que algunos encuestados parecen equivocarse.
Debido a que la expresión en esta consulta usa un operador aritmético (el símbolo más +), MySQL convertirá cualquier cadena en la expresión a números.
Para demostrar, lo siguiente producirá el resultado 6:
La concatenación de cadenas en MySQL requiere la función CONCAT (), por lo que no hay ambigüedad aquí y MySQL convierte las cadenas en flotantes y las agrega.
De hecho, creo que la razón por la que la consulta inicial no estaba funcionando es muy probable porque la variable $ points no estaba establecida en los puntos actuales del usuario. Se estableció en cero o no se configuró: MySQL lanzará una cadena vacía a cero. Por ejemplo, lo siguiente devolverá 0:
Como dije, espero no estar demasiado fuera de tema. Estoy de acuerdo en que Daan y Tomas tienen las mejores soluciones para este problema en particular.
fuente
fuente
Además, para "incrementar" la cadena, cuando se actualiza, use
CONCAT
fuente
¿Quién necesita actualizar cadenas y números?
SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);
fuente
Debe usar PDO para evitar el riesgo de inyección SQL.
Puede conectarse a DB de esta manera:
No es necesario consultar DB para obtener el número de puntos. Puede incrementar directamente en la consulta de actualización (
points = points + 1
).(nota: Además, no es una buena idea incrementar el valor con PHP porque necesita seleccionar primero los datos y el valor puede cambiar si otros usuarios lo actualizan).
fuente
Retire el
'
alrededor depoint
:Está "emitiendo" un valor entero para encadenar en su consulta original ...
fuente
¿Por qué no dejas que PHP haga el trabajo?
fuente