Saya telah membuat kode ini untuk memberi +1 poin, tetapi tidak berfungsi dengan baik.
mysql_query("
UPDATE member_profile
SET points= ' ".$points." ' + 1
WHERE user_id = '".$userid."'
");
variabel $ points adalah poin pengguna sekarang .. Saya ingin ditambah satu untuk itu .. jadi contoh jika dia punya seperti 5 poin, itu harus 5 + 1 = 6 .. tetapi tidak, itu hanya berubah ke 1
Apa yang saya lakukan salah? Terima kasih
php
mysql
sql
sql-update
Karem
sumber
sumber
Jawaban:
Anda juga bisa melakukan ini:
sumber
UPDATE xyz SET points = MIN(points + 1, YOUR_LIMIT_VALUE_HERE)
dan tidak berhasil. Apa yang bekerja adalah:UPDATE xyz SET points = points + 1 WHERE points < YOUR_LIMIT_VALUE_HERE
.Anda dapat melakukan ini tanpa harus meminta jumlah poin aktual, sehingga akan menghemat waktu dan sumber daya selama eksekusi skrip.
Lain, apa yang Anda lakukan salah adalah bahwa Anda melewati jumlah poin lama sebagai string (
points='5'+1
), dan Anda tidak dapat menambahkan nomor ke string. ;)sumber
Semoga saya tidak akan offtopic pada posting pertama saya, tetapi saya ingin sedikit memperluas casting dari integer ke string karena beberapa responden tampaknya salah.
Karena ekspresi dalam kueri ini menggunakan operator aritmatika (simbol plus +), MySQL akan mengonversi string apa pun dalam ekspresi menjadi angka.
Untuk menunjukkan, berikut ini akan menghasilkan hasil 6:
Rangkaian string dalam MySQL membutuhkan fungsi CONCAT () sehingga tidak ada ambiguitas di sini dan MySQL mengubah string menjadi float dan menambahkannya bersama-sama.
Saya benar-benar berpikir alasan kueri awal tidak berfungsi kemungkinan besar karena variabel $ points sebenarnya tidak disetel ke poin pengguna saat ini. Entah itu diatur ke nol, atau tidak disetel: MySQL akan membuang string kosong ke nol. Sebagai ilustrasi, berikut ini akan mengembalikan 0:
Seperti yang saya katakan, saya harap saya tidak terlalu di luar topik. Saya setuju bahwa Daan dan Tomas memiliki solusi terbaik untuk masalah khusus ini.
sumber
sumber
Juga, untuk string "kenaikan", saat memperbarui, gunakan
CONCAT
sumber
Siapa yang perlu memperbarui string dan angka
SET @a = 0; UPDATE obj_disposition SET CODE = CONCAT('CD_', @a:=@a+1);
sumber
Anda harus menggunakan PDO untuk mencegah risiko injeksi SQL.
Anda dapat terhubung ke DB seperti ini:
Tidak perlu meminta DB untuk mendapatkan jumlah poin. Anda dapat menambahkan secara langsung dalam permintaan pembaruan (
points = points + 1
).(catatan: Juga, bukan ide yang baik untuk menambah nilai dengan PHP karena Anda harus memilih dulu data dan nilainya dapat diubah jika pengguna lain memperbaruinya.)
sumber
Hapus
'
sekitarpoint
:Anda "menuang" nilai integer ke string dalam kueri asli Anda ...
sumber
Mengapa Anda tidak membiarkan PHP melakukan pekerjaan itu?
sumber