UPDATE tablosu SET 1 = 'yes' WHERE id = '$ userID' 'çalışmıyor

Takip koduna sahibim:

$updateCode = mysql_query("UPDATE pages SET pageCode='$code' WHERE id='$userID' AND pageOrder='1'");

$updateProgress = mysql_query("UPDATE progress SET 1='yes' WHERE id='$userID'");

$updateRewards = mysql_query("UPDATE earnedRewards SET 1='yes' WHERE id='$userID'");

İlk UPDATE gayet iyi çalışıyor ve pages tablosu güncelleniyor. Ancak, ikinci iki GÜNCELLEME çalışmıyor ve ilerleme ve kazanılan Ödüller 'deki 1 sütun' yes 'olarak güncellenmiyor.

İkinci iki UPDATES'in neden çalışmadığına dair herhangi bir düşünce var mı?

0
Sütun ismi gerçekten 1 mi? Onu daha fazla açıklayan başka bir şeye değiştirmeyi düşünmelisiniz. Ve $ userID'nizin doğru olduğundan emin misiniz? Bu sorguyu phpMyAdmin'de (veya benzeri) çalıştırarak, ne olur?
katma yazar OptimusCrime, kaynak
Nayena: Aşağıdaki hatayı aldım: SQL sözdiziminde bir hata var; 1. satırda '1 =' yes 'WHERE id =' 1 '' yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin. Öneriniz için teşekkürler. PHP için yeni ve mysql_error kullanmayı hatırlamak güzel.
katma yazar Mark Rummel, kaynak
Herkese teşekkürler! Bir harfle başlamak için sütun adını değiştirdim ve gayet iyi çalıştı.
katma yazar Mark Rummel, kaynak
@middus $ userID ile SQL Injection güvenlik açığı hakkında söylediklerinizi açıklayabilir misiniz?
katma yazar Mark Rummel, kaynak
Sütun "1" olarak adlandırılmış olsa bile, UPDATE kodunuz ona erişmeye çalışmamaktadır, bunun yerine 1 tamsayısını tekrar girmeye çalışmaktadır.
katma yazar thetaiko, kaynak
Sorgularınızdan sonra "veya die (mysql_error ())" ifadesini ekleyin - sorgunuzda herhangi bir hata olup olmadığını gösterir.
katma yazar Jan Højriis Dragsbaek, kaynak
@MarkRummel Değerinin nereden geldiğine bağlı. Bunu $ _ GET ['userid'] 'den aldığınızı varsayalım. Bu tehlikeli olurdu, çünkü birisi bu değeri bu parametreye koyabilir 12 'OR id = id; - . Kötü şeyler olabilir;). Bundan kaçınmak için $ userID değerinin sayısal olduğundan emin olun ( int 'a dönüştürün). Kullanıcı tarafından sağlanan dizelerle mysql_real_escape_string 'i kullanmalısınız.
katma yazar middus, kaynak
@MarkRummel Lütfen bu tür bir kodun SQL enjeksiyonlarına karşı savunmasız olduğunu (veya olabileceğini) unutmayın. $ userID öğesinin dezenfekte edildiğinden emin olmanız gerekir (ör. İnt veya exit olarak yayınlanır).
katma yazar middus, kaynak
Sütununuz "1" olarak adlandırıldı mı? Bu beni şaşırtıyor.
katma yazar Patrick, kaynak

2 cevap

Sütun adı 1 ??? Sütun adını değiştirmelisiniz

4
katma
Bir harfle başlamak için sütun adını değiştirdim ve her şey iyi çalıştı. Teşekkürler!
katma yazar Mark Rummel, kaynak
Katılıyorum. Bu bir sütun için iyi bir isim değil.
katma yazar middus, kaynak

Eğer 1 gerçekten sizin sütun isminizse, backticks ile kaçmanız gerekir.

UPDATE progress SET `1`='yes' WHERE id='$userID'

Sütunu konumsal olarak (yani tablonun ilk sütunu) referans vermeye çalışıyorsanız, yapma. Sütunun adını kullanın.

3
katma
@JoeStefanelli Teşekkürler! Bir harfle başlamak için sütun adını değiştirdim ve her şey şimdi çalışıyor.
katma yazar Mark Rummel, kaynak
Middus: Bu mümkün. dokümanları alıntılamak: "Tanımlayıcılar bir rakamla başlayabilir ancak alıntı, yalnızca rakamlardan oluşmayabilir. "
katma yazar Joe Stefanelli, kaynak
@middus: Bunun bir fantastik sütun adı olduğunu kabul ediyorum. Ama, eğer bir şey yapılabilirse, birisinin bunu yapacağını garanti edeceğim.
katma yazar Joe Stefanelli, kaynak
Middus: Evet, her zaman alıntılandığı sürece mümkün ...
katma yazar ircmaxell, kaynak
1 adlı bir sütunun olması bile mümkün mü? Eğer öyleyse: ne düşünüyordun, MySQL-devs !?
katma yazar middus, kaynak
Evet, bu nedenle, bir MySQL dev olsaydım, tamamen sayısal bir sütun ismine izin vermezdim :). Ben de öyle demeye çalışıyordum.
katma yazar middus, kaynak
Cidden, neden buna izin vermek istesin? Bu, gerçekleşmesini bekleyen bir tren batığı.
katma yazar middus, kaynak