Bir alana 1 ekle

8 Cevap php

Nasıl 1 sorgusuna aşağıdaki 2 sorgular dönüş yok

$sql = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result     = $db->sql_query($sql);
$level      = (int) $db->sql_fetchfield('level');
$db->sql_freeresult($result);

++$level;

$sql = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

Ben bir phpBB mod onu kullanıyorum ama yüreğin ben o ben bir sorgu olarak yapabileceğini çok daha kolay ve daha hızlı olurdu gibi görünüyor, seviyesini kapmak güncelleştirmek sonra ona bir tane eklemek olmasıdır.

Edit: $ id zaten böylece kaçış yok bu sefer gerekli, bir tamsayı olmak zorunda kalmıştır.

8 Cevap

Bunun için downmodded olsun?

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

Teifion spesifik durumunda, phpBB DDL belirli alan olarak NOT NULL listeler, yani NULL artan hiçbir tehlike yok.

Genel durumda, sıfır temsil etmek NULL kullanmamalısınız. NULL Arttırım should NULL bir cevap vermek. Eğer = 0 null, away from keyboard adım ve başka bir eğlence bulmak, sadece bize geri kalanı için hayat zor yapıyoruz sanıyor yanlış geliştirici tür iseniz. Tabii ki, bu bilgisayar endüstrisi ve biz yanlış olduğunu söylemek kim? Yanlış değilseniz, kullanın

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

... Ama o da kabul edelim: yanılıyorsun. Herkesin 0 düzeyinde başlar, sonra DDL içermelidir

level INT DEFAULT '0' NOT NULL

durumda programcılar bir kayıt oluştururken bunu ayarlamayı unutmayın. Herkes düzeyinde 0 başlar, sonra DEFAULT atlayın ve yaratılış bir değer sağlamak için programcı zorlar. Bazı insanlar düzeylerinin ötesinde ise, kimin için bir seviyesine sahip sonra eşit hiçbir anlamı yoktur onların seviyesine birini ekleyerek, anlamsız bir şeydir. Bu durumda, DDL gelen NULL bırakın.

Bu şekilde:

UPDATE skills
SET level = level + 1
WHERE id = $id

PDO ve hazırlanan sorgu ile:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();
$sql = "UPDATE skills SET level = level + 1 WHERE id = $id";

Ben sadece düzgün başka kodunuzu $ id hijyen umut!

Bu deneyin

UPDATE skills SET level = level + 1 WHERE id = $id

Nasıl hakkında:

UPDATE skills SET level = level + 1 WHERE id = $id;

Josh: Mat da dediği gibi, tamamen yanlış cevap vardı, çünkü ben seni downmodded. Şimdi ne kadar gösteriyor gördüm ne değildir.

Mat: Bu soruda yapıştırılan budur. Bu düzenlendi değil, bu yüzden Markdown bir hatadan olduğunu bağlıyor. Ama işin garibi, ben fark ettim.

Ayrıca: evet, mysql_escape_string()!