mysql sorgu uygulama içinde düzgün çalışmıyorsa

2 Cevap php

Ben tamamen stumped. İşte benim php (CodeIgniter) kodu:

function mod()
{
    $uid = $this->session->userdata('uid');
    $pid = $this->input->post('pid');
    if ($this->_verify($uid,$pid))
    {
        $name  = $this->input->post('name');
        $price = $this->input->post('price');
        $curr  = $this->input->post('curr');
        $url   = $this->input->post('url');

        $query = $this->db->query("UPDATE items SET
                        name=".$this->db->escape($name).",
                        price=".$this->db->escape($price).",
                        currency=".$this->db->escape($curr),",
                        url=".$this->db->escape($url)."
                        WHERE pid=".$this->db->escape($pid)." LIMIT 1");
    }
    header('location: '.$this->session->userdata('current'));

}

Bu kodun amacı, 'ürün' tablosundaki bir satırın özellikleri (adı, fiyatı, döviz, url) (priary anahtar pid) değiştirmek için. Ancak, bu işlev çalışmasına izin nedense, bir kez bakılmaksızın pid ve sorgunun sonuna tacked LİMİT 1 şey, adı, fiyatı, döviz ve tablodaki tüm kayıtların url değiştirir. Sorgunun son satırı tamamen göz ardı ediliyor sanki.

: Bu yeterince garip değilmiş gibi, ben bir "echo" SQL sorgu olmak koşmak görmek, ve ben beklediğiniz çok gibi bir sorgu çıkışlarına "$query = $this->db->query(" yerine

UPDATE items 
   SET name = 'newname', 
       price = 'newprice', 
       currency = 'newcurrency', 
       url = 'newurl' 
 WHERE pid = '10' 
 LIMIT 1

MySQL pencerenin içine kopyala-yapıştırma bu ben tam istediğiniz gibi davranır: Bu seçili pid ile satır değiştirir.

Burada neler oluyor??

2 Cevap

Şimdi kendimi aptal gibi hissediyorum: tüm aldı, farklı bir yazı kodumu görüyordum. Benim kod var

currency=".$this->db->escape($curr),",

yerine

currency=".$this->db->escape($curr).",

Echoing görünüşe yankı birden fazla dize, virgül ayrılmış verebilir çünkü sadece iyi iş yaptı, ve onları birleştirir

cries Ben bu saat geçirdim

Ben kendi soru cevap biliyorum, ama bana sadece kazık bu ekleyelim: Siz bu sorgu tür AT ALL CodeIgniter'ı yararlanarak değil - bu niyetiyle gibi CI kullanıldığı takdirde, bu yazım hatası vardı olmazdı ki. Sizin sorgu (diğer şeyler arasında) bu gibi görünmelidir:

$query = $this->db->update('items', 
                           array('name' => $this->input->post('name'),
                                 'price' => $this->input->post('price'),
                                 'curr' => $this->input->post('curr')),
                           array('id' => $this->input->post('id')),
                           1);

Elle sorgu dizesi monte ederek, CI sizin için ne hatamızı telafi ediyoruz. Eğer JOIN deyimi bazı kompleksi kullanırken sadece zaman CI kendi SQL yazılı olacak ve o zaman bile, size yazım hatası tanıtan değil emin olmak için sprintf PHP fonksiyonunu kullanmak istesin.