Eu criei esse código para dar um ponto +1, mas ele não funciona corretamente.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
a variável $ points é o ponto do usuário no momento .. quero acrescentar um a ele .. por exemplo, se ele tivesse 5 pontos, deveria ser 5 + 1 = 6 .. mas não muda, apenas muda para 1
O que eu fiz errado? obrigado
php
mysql
sql
sql-update
Karem
fonte
fonte
Respostas:
Você também pode fazer isso:
fonte
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
e não funcionou. O que fez o trabalho foi:UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
.Você pode fazer isso sem precisar consultar a quantidade real de pontos, para economizar tempo e recursos durante a execução do script.
Senão, o que você estava fazendo de errado é que passou a quantidade antiga de pontos como uma string (
points='5'+1
) e não pode adicionar um número a uma string. ;)fonte
Espero não estar saindo offtopic no meu primeiro post, mas gostaria de expandir um pouco a conversão de inteiro para string, pois alguns entrevistados parecem estar errados.
Como a expressão nesta consulta usa um operador aritmético (o símbolo de mais +), o MySQL converterá quaisquer strings da expressão em números.
Para demonstrar, o seguinte produzirá o resultado 6:
A concatenação de strings no MySQL requer a função CONCAT (), portanto não há ambiguidade aqui e o MySQL converte as strings em floats e as adiciona.
Na verdade, acho que o motivo pelo qual a consulta inicial não estava funcionando é mais provável, porque a variável $ points não foi de fato definida para os pontos atuais do usuário. Ele foi definido como zero ou não foi definido: o MySQL converterá uma string vazia em zero. Para ilustração, o seguinte retornará 0:
Como eu disse, espero não estar sendo muito fora de tópico. Concordo que Daan e Tomas tenham as melhores soluções para esse problema em particular.
fonte
fonte
Além disso, para "incrementar" a string, ao atualizar, use
CONCAT
fonte
Quem precisa atualizar string e números
SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);
fonte
Você deve usar o PDO para evitar o risco de injeção de SQL.
Você pode se conectar ao DB assim:
Não é necessário consultar o banco de dados para obter o número de pontos. Você pode incrementar diretamente na consulta de atualização (
points = points + 1
).(observação: Além disso, não é uma boa ideia incrementar o valor com o PHP, pois é necessário selecionar primeiro os dados e o valor poderá ser alterado se outros usuários o atualizarem.)
fonte
Remova o em
'
torno depoint
:Você está "convertendo" um valor inteiro para a string na sua consulta original ...
fonte
Por que você não deixa o PHP fazer o trabalho?
fonte