2010-01-09 16 views
41

php ve mysql kullanarak bir alan değerini güvenli bir şekilde artırmak istiyorum.PHP-MySQL-MySQL tamsayı alanını nasıl güvenli bir şekilde artırabilirim?

  1. Ne tür bir tablo/alan kullanmalıyım?

  2. MySQL'in en az sürümünü kullanmam gerekiyor mu?

  3. Bunun için sql kodu nedir, MySQL için güvenli işlem nedir?

+0

Önceki soruları nasıl kapatırım? – John

+1

Cevaplardan birini "kabul edildi" olarak işaretleyin (yeşil renge dönüşecek onay işaretini tıklatarak, bkz. Http://stackoverflow.com/faq) –

cevap

73

Ne tür "tablo" ile depolama motorunu kastediyorsunuz. Mutasyonları (yani "arşiv" veya "kara delik") destekleyen herhangi bir şey

Herhangi bir sayısal alan (tinyint, int, float, vb) yapacaktır. Bir işlemi isterseniz, o zaman bir işlem haline Yukarıdaki sorgu paketi

UPDATE table SET field = field + 1 WHERE [...] 

: Yani, hiçbir özel PHP kodu, istenen alanın artırma için sadece SQL var dedi. MySQL sürümü için, @hsz ile katılıyorum - mümkün olan en güncel sürümü kullanın.

+1

Yukarıdaki işlemleri nasıl bir işlem haline getirebilirim? – John

7

Eğer birincil anahtar bahsediyoruz o zaman primary ve auto_increment olarak id sütun ayarlayın.

artırılması alan böyle bakıyor:

UPDATE table SET field = field + 1 WHERE id = 9 

Hakkında MySQL versiyonu - yapabilirsiniz yeni kullanırlar. ;)
> 5.0 iyi olacaktır.

+2

bu işlem güvenli midir? – John

2

1. ne tür bir tablo/alan kullanmalıyım?

-> Tablo türü, uygulamanız için planladığınız şeye göre değişir. Innodb veya Myisam olabilir. Sayısal sütunu kullanmanızı öneririm böylece onları artırabilir/azaltabilirsiniz. Negatif sayılara izin vermeyi planlıyorsanız UNSIGNED YAPMAYIN.

TINYINT (length) - 1 - Integer with unsigned range of 0-255 and a signed range from -128-127 
SMALLINT (length) - 2 - Integer with unsigned range of 0-65535 and a signed range from -32768-32767 
MEDIUMINT(length) - 3 - Integer with unsigned range of 0-16777215 and a signed range from -8388608-8388607 
INT(length) - 4 - Integer with unsigned range of 0-429467295 and a signed range from -2147483648-2147483647 
BIGINT(length) - 8 - Integer with unsigned range of 0-18446744 and a signed range from 
-9223372036854775808-9223372036854775807 

Ben kullanması gerekir MySQL minimum sürümü 2.Is:

Burada sütun uzunluğunu bildirerek içinde yarayabilecek sınırları var?

-> Sadece otomatik artış kullanmak için? Güncel bir sürümü kullanarak iyice uzaktasınız. Mümkünse,> 5.2.4 bir şey öneririm.

3. Bunun için sql kodu nedir, MySQL için güvenli işlem nedir?

-> Üzgünüz, şu anda bunun için bir cevabınız yok.

+0

OP hiçbir zaman auto_increment'den bahseder - sadece artışa bakmak. –

+0

evet, bazen bir artış, bazen bir azalmadır. Başparmak aşağı/yukarı puanlama sistemi için bir oylama sistemi yapıyorum. – John

+0

@Chris: İşaretlediğiniz için teşekkürler. @John: Cevabımı güncelledim. Lütfen buna bakın. – Devner

İlgili konular