Sql sorgu sorunu

4 Cevap php

Ben veritabanına bir form değerleri güncelleyecek altında sql sorgu var

$sql=
    "update leads set
       category='$Category',
       type='$stype',
       contactName='$ContactName',
       email='$Email',
       phone='$Phone',
       altphone='$PhoneAlt', mobile='$Mobile',
       fax='$Fax',
       address='$Address',
       city='$City',
       country='$Country',
       DateEdited='$today',
       printed='$Printed',
       remarks='$Remarks' 
     where id='$id'";

    $result=mysql_query($sql) or die(mysql_error());
echo '<h1>Successfully Updated!!.</h1>';

i gönderirseniz ben herhangi bir hata alamadım ve başarı mesajı görüntülenir ancak güncellenen veritabanı değil. I $ sql echo, tüm değerleri doğru ayarlanır. i $ sonuç ECH zaman ve i 1 değerini alır.

Birisi ben burada yanlış ne yapıyorum bana söyleyebilir misiniz?

4 Cevap

Eğer beklenen sonucu veren ya bir hata almayan bir sorgu var, ve sorun açık değilse, genellikle bu çalıştırıldığı hemen önce son sorgunun bir göz atmalısınız. Sorguyu çalıştırmadan önce bu hakkı kullanmayı deneyin:

echo $sql;
exit;

Gerçek sorgu görüntüleniyor sık ​​sık sorgu değişkenleri içerir, özellikle, sorunun ne olduğunu çok açık hale getirir. Sorun hala belli değilse veritabanı motoru doğrudan geri bildirim almak için bir sorgu tarayıcı içine olduğu gibi, sorguyu yapıştırabilirsiniz.

Parametreler MySQL ile yerini almak gibi İlginçtir, parametrized sorguları kullanarak, sen, parametre değerlerini görmek için almazsınız, değil PHP, ancak, yine de tüm Hazırlanan sorguyu görmek için alırsınız.

Ayrıca, mysql_affected_rows() fonksiyonu ile UPDATE deyimi etkilenen satırların sayısını görebilirsiniz. Hemen sorgu çalıştırıldıktan sonra bu koyabilirsiniz:

echo ("Updated records:", mysql_affected_rows());

Sorguları birleştirerek zaman alanlarda genellikle unutulur.

$sql = "SELECT * FROM ducks";
$sql .= "WHERE duck = 'goose'";

Yukarıdaki sorgu yankılanan, biz bakın:

SELECT * FROM ducksWHERE duck <> 'goose'

Ben senin UPDATE açıklamada WHERE deyimi, bir "id = '$id'" eşleşen olmadığını tahmin ediyorum.

Ayrıca, id sütun gerçekten bir dize? Sen değer etrafında tek tırnak koyduk. MySQL gerekirse bir tamsayı dize döküm, ama bir tamsayı ise, veritabanını bazı işler kaydedin ve tek tırnak kaldıracaktır.

Doğrudan bazı DB aracını kullanarak $ sql yankı çalışan denediniz mi? Bu daha bilgilendirici bir hata sağlayabilir. Eğer inşaat Alternatif olarak, işlem işlenen olmayan bir sorunu olabilir. Genellikle bir bağlantı otomatik işlemleri işlemek için ayarlanmış, ancak burada durum olmayabilir. Bir taahhüt eklemeyi deneyin.

Ve hiç SQL injection saldırıların duymuş?

$ sql yankı ve herhangi bir veritabanı konsolunda doğrudan çalıştırmayı deneyin, id = $ id ile kayıt yok olabilir

SQL Injection cevap olabilir. Lütfen parametreleri tırnak veya diğer ayrılmış karakterler gibi bazı beklenmedik bir bilgi varsa (şu anda) Kasıtlı bir saldırı, ancak garip sonuçlar olabilir. Yani, veritabanı yönetim programı doğrudan bu SQL çalıştırmayı deneyin.